Namespaces und ProjekteHallo,
Wir verwenden einige benutzerdefinierte Funktionen, die wir über ein Add-In mit anderen Kollegen teilen.
Der Namespace „custom“ wird im globalen Namespace erstellt, auf die Funktionen kann über custom:myfunction zugegriffen werden.
Das Problem: Einige Kollegen verwenden Projekte.
Ein Projekt hat seinen eigenen globalen Namespace – und von dort aus sind benutzerdefinierte Funktionen nicht zugänglich:
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(custom:myfunc(1), Caption ("Namespace not accessible")));
);
Andererseits ist es nicht möglich, das Skript ein zweites Mal innerhalb des Projekts auszuführen [um eine doppelte benutzerdefinierte Funktion im Projektumfang zu erstellen]. Anscheinend findet JMP den „globalen“ Namespace und versucht, ihn zu löschen (!!):
project = New Project(
Run Script(Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x, y}, x + y - 1 ) )));
);
Wie verwenden/greifen Sie parallel auf benutzerdefinierte Funktionen aus dem Standard-JMP und aus Projekten zu?
Automatisierung und SkriptingBetreff: Benutzerdefinierte Funktionen innerhalb von ProjektenVielleicht ein Workaround:
Speichern Sie ein Symbol *) im Root-Namespace (über :::), um über das Symbol auf den benutzerdefinierten Funktions-Namespace zuzugreifen:
::: custom = New Namespace("custom" );
// now accessible from everywhere via :::custom
project = New Project(
Run Script(Caption(Char(Namespace Exists( ::: custom ))));
);
Leider:
Add Custom Functions( New Custom Function( "custom", "myfunc", Function( {x}, x + 20 ) ));
project = New Project(
Run Script(Try(:::custom:myfunc(1), Caption ("content of the Namespace is not accessible")));
);
*) NB: Interessant – das Symbol muss den gleichen Namen wie der Namespace haben (!)
Was nicht funktioniert:
::: customNS = New Namespace( "custom" );
...
:::customNS:myFunc(1)
Obwohl:
is namespace(:::customNS) // -> 1
Betreff: Benutzerdefinierte Funktionen innerhalb von ProjektenAh, es ist kein Problem mit benutzerdefinierten Funktionen , es scheint ein allgemeines Problem mit Namespaces und Projekten zu sein:
::: myNS = New Namespace("myNS");
:::myNS:x ="success";
caption ("direct: "|| :::myNS:x);
wait(2);
caption(remove);
project = New Project(
Run Script(Try(Caption("project: " || :::myNS:x), Caption ("fail")));
);Interessant: So funktioniert es
... aber nicht sehr praktisch
project = New Project(Run Script(Try(Caption("project: " || namespace(:::myNS):x), Caption ("fail"))));Betreff: Benutzerdefinierte Funktionen innerhalb von ProjektenIch habe den JMP-Support informiert (# 00170669) und die Rückmeldung erhalten, dass es sich bei den Problemen um einen Fehler handelt:
:::myNs; // // New Namespace("myNS", ...)
As Root(myNs); // New Namespace("myNS", ...)
//:::myNs:x; // fail in project, works in script window outside project
As Root(myNs):x // success
Eval(:::myNs):x; // success
Namespace(:::myNs):x; // success
Ein toller Trick: Lokalisieren Sie den Stamm-Namespace:
myVar = :::myNs
myVar:x // success
vielen Dank, @Jasean !!! Sehr reibungslos, viel praktischer als namespace(:::myNS):x .
Betreff: Benutzerdefinierte Funktionen innerhalb von ProjektenVorherige Diskussion mit einem ähnlichen Thema:
Add-Ins können in Project nicht ausgeführt werden
Betreff: Benutzerdefinierte Funktionen innerhalb von ProjektenDas hat mir geholfen. Vielen Dank für die Weitergabe des Links.
Betreff: Benutzerdefinierte Funktionen innerhalb von ProjektenIch habe das Thema gerade zu Tiny Traps in Jmp und JSL hinzugefügt – und die Namespace-bezogenen Themen gebündelt.