Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Hallo zusammen,
Ich habe Probleme, auf den Here-Namespace zuzugreifen, während ich den lokalen Here-Namespace eingegeben habe. Mein Beispielskript sieht wie folgt aus:
Names Default To Here(1);
Delete Symbols();
// Declare a variable in the "Here" scope
x = "Variable";
Local Here(
// Access the "Here" scope variable
y = Eval(Namespace("here") << Get("x"));
Show(y);
);Wenn ich den Debugger verwende, kann ich deutlich sehen, dass es nach der Eingabe von „Local Here“ zwei „Here“-Bereiche gibt. Ich vermute, einer ist von hier und der andere von „Local Here“. Ich habe mehrere Ansätze ausprobiert, aber keiner hat bisher funktioniert.
Automatisierung und SkriptingBetreff: Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Ich denke, das geht nicht direkt (das ist ja der Sinn von Local Here)

Programmierfunktionen (jmp.com)
Betreff: Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Hallo jthi,
Wenn das der Fall ist, könnten Sie mir sagen, was der beste Ansatz für den „Root-Namespace“ ist? Ich verwende derzeit den globalen Namespace und beabsichtige, den Here-Namespace zu nutzen und eine Verschmutzung des Namespaces zu vermeiden. Mein Skript umfasst ca. 80 Variablen.
Betreff: Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Hängt davon ab, was Sie tun. Sie können benannte Namespaces, anonyme Namespaces, globale, hier, lokale, ... verwenden. Trotzdem würde ich meine Skripte fast immer mit „Names Default To Here(1);“ beginnen.
Betreff: Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Ohne die Standardnamen HERE(1) würden die generierten Variablen den globalen Namensraum „verunreinigen“.
Mit den standardmäßig auf HERE(1) eingestellten Namen „verunreinigen“ die generierten Variablen den Here -Namespace.
Um die Variablen zu organisieren, können Sie Ihren eigenen Namespace erstellen und die Variablen dort anlegen:
Names Default To Here(1);
Delete Symbols();
// Declare a variable in the "Here" scope
x = "Variable";
//get the value
ns = Namespace("here");
val = ns << Get Value("x");
Print(val);
Show(x);
new namespace("myNS");
NS:x = "variable";
Show(NS:x)Betreff: Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Es ist seltsam, dass es zwei HERE -Namespaces gibt und dass diese den gleichen Inhalt anzeigen, nämlich den des lokalen Here.
Wenn Sie das lokale „Here“ verlassen, gibt es nur einen einzigen „Here“ -Namespace und dieser zeigt den Inhalt des „Names Default to Here(1) “-Namespace korrekt an.
Ein weiteres Problem mit dem JSL-Debugger:
seit JMP15 ist der lokale Namespace von Funktionen nicht mehr zugänglich: Function locals in JSL Debugger
Betreff: Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Ich habe es überprüft. Es scheint, dass Local Here problemlos auf globale und benannte Namespaces zugreifen kann. Aber wie soll ich einen anonymen Namespace initialisieren?
Meine Idee besteht im Wesentlichen darin, dass sich der Endbenutzer nicht um die Variablen kümmern muss und dass diese Variablen/Namespaces geschlossen werden, nachdem die zugehörige Datentabelle geschlossen wurde.Betreff: Wie greife ich auf den Here-Namespace zu, während ich den lokalen Here-Namespace eingegeben habe?Verwenden Sie zu diesem Zweck den Hier -Namespace. Er bleibt bestehen, solange das Skriptfenster oder ein anderes erstelltes Fenster geöffnet ist.
Es wird gelöscht, sobald das Skriptfenster und die Berichte geschlossen werden.
Wie kann ich darauf zugreifen?
Sie können auf jeden Namespace zugreifen, wenn Sie den „Schlüssel“ haben:
Wenn Sie momentan Zugriff auf den Namespace haben, erstellen Sie einfach eine Referenz auf den Namespace und verwenden Sie diese als Schlüssel.
Wichtig:
Wenn Sie den Schlüssel im Hier -Namespace speichern, ist er von außen nicht zugänglich.
Um es von überall zugänglich zu machen, speichern Sie es einfach im globalen Namespace.
-> global „verunreinigt“ durch eine Schlüsselvariable – nicht mehr durch ~ 80 Variablen : )
JMP verarbeitet den anonymen „Here“-Namespace und löscht ihn, sobald er nicht mehr benötigt wird.
Names Default To Here(1);
Delete Symbols();
// Declare a variable in the outer "Here" scope
x = "Variable";
//myHere = Namespace("here"); // created inside HERE -> not accessible from local here
::myHere= Namespace("here"); // so let's create the reference in the global NS
z=5;
Local Here(
:: mylocalHere= Namespace("here"); // will be deleted after local HERE
// the same for "myHere": it will be deleted once the code is finished AND the editor is closed -> very convenient
::mypersistentNamespace = New Namespace("persistent"); // manually created -> persistent
persistent:y="still alive";
// Access the outer "Here" scope variable via the namespace reference
y = Eval(::myHere << Get value ("z"));
Show(y);
);
Show(:: mylocalHere); // deleted
Show(::mypersistentNamespace) // alive
aus einem anderen Skriptfenster:
Show(:: myHere);
Show(:: mylocalHere);
Show(::mypersistentNamespace);