JMP verwendet den globalen Namespace als Standard-Namespace für jedes neue Skript. Die Möglichkeit, einen „lokalen“ Namespace anzugeben, ist der Befehl Names Default to Here(1). Meine Frage lautet: Wenn ich eine Datei einfüge, die oben die Bezeichnung „Names Default to Here(1)“ enthält, werden die Namen/Variablen aus dem untergeordneten Skript übernommen. Allerdings, wenn ich definiere
include("filepath/name.ext", << New Context, << NamesDefaultToHere) Dadurch bleiben die Namespaces getrennt. Was ist der Grund dafür? Es scheint, als ob es dasselbe tun sollte? Da ich eine Include-Anweisung verwende, wird davon ausgegangen, dass ich die Namen aus dem untergeordneten Skript übernehmen möchte?
Der folgende Satz gibt x = 10 zurück, obwohl sich NamesDefaultToHere(1) in Skript B befindet
Skript A
x = 5;
include("filepath/script_B.jsl");
show(x);Skript B
namesDefaultToHere(1);
x = 10;
Während dieses x =5 zurückgibt, weil ich „namesDefaultToHere“ in der Include-Anweisung hatte
Skript A
x = 5;
include("filepath/script_B.jsl", << newContext, <<NAMESDEFAULTTOHERE></NAMESDEFAULTTOHERE>Skript B
namesDefaultToHere(1);
x = 10
@drewfoglia Und @EvanMcCorkle hielt auf dem Discovery Summit in Tuscon 2019 einen hervorragenden Vortrag mit dem Titel Grundlegende Skripterstellung für Effizienz und Reproduzierbarkeit: Weniger tun, um mehr zu tun (2019-US-TUT-290) in dem dieses Thema behandelt wird.
Eine der Folien (22) vermittelt Missverständnisse über die Standardeinstellung für „Hier“-Namen. Eine davon ist, dass jede JSL-Datei ihren eigenen Here-Kontext hat. Dies gilt, wenn jedes Skript separat ausgeführt wird, aber wenn JSL-Datei B in JSL-Datei A eingebunden wird, teilt B den Here-Kontext von A.
Im ersten Beispiel wird verwendet die Regeln zur Namensauflösung , JMP findet X im Here-Namespace und zeigt den Wert 10 an.
Im zweiten Beispiel wird die Verwendung von „neuer Kontext“ erstellt einen anonymen Namespace, in dem Skript B ausgeführt wird. In diesem Fall ist X nicht Teil des Here-Namespace, daher wird der im Global-Namespace gefundene Wert angezeigt.