Integrierte Namespace-Nutzung, Names Default to Here, lokale FunktionsvariablenHallo, ich habe eine Frage zu Namespaces in Modulskripten und Funktionen innerhalb dieser Skripte.
Soweit ich weiß, wird jede Variable, die definiert ist und bei der Names Default to Here() true ist, einem „hier“-Namespace zugewiesen. Ich bin mir nicht sicher, welchen Umfang dieser Namespace hat. Gilt „hier“ immer für das vollständige Skript (z. B. innerhalb eines Moduls) oder können auch lokale Variablen für einzelne Funktionen innerhalb eines Skripts erstellt werden? Was ist der richtige Weg, um lokale Variablen innerhalb einer Funktion zu erstellen? Gibt es eine Möglichkeit, dass in jeder Funktion definierte Variablen nur für diese Funktion und nicht für das gesamte Skript lokal sind? Was ich mir vorstelle, ist ungefähr wie folgt.
//Script to define different scopes of variables<BR />Names Default to Here(1); //set variables to be scoped to this script by default<BR />a = 1;<BR />b = 2;<BR /><BR />Function1 = Function({},<BR /> Names Default to Here(1);<BR /> c = 3;<BR />);<BR /><BR />Function2 = Function({},<BR /> Names Default to Here(1);<BR /> d = 4;<BR />);@lbrickweg @jcimini
Betreff: Integrierte Namespace-Nutzung, Namen standardmäßig hier, lokale Funktionsvariablen
@mringqui schrieb:
Habe es! Die Sprache „pro Einreichung“ ist sehr hilfreich.
Wenn Sie verschiedene Module von App Builder ausführen, werden die Skripts für jedes Modul beim Starten der .jmpapp einbezogen? Oder werden die Skripte für jedes Modul beim << Instanz erstellen tatsächlich separat übermittelt, sodass jedes Modul seinen eigenen Here-Namespace hat?
Kurz gesagt: Bezieht sich Here bei der Verwendung einer JMP-App normalerweise auf jedes Modul oder auf die App als Ganzes?
@EvanMcCorkle
Betreff: Integrierte Namespace-Nutzung, Namen standardmäßig hier, lokale FunktionsvariablenHabe es! Die Sprache „pro Einreichung“ ist sehr hilfreich.
Wenn Sie verschiedene Module von App Builder ausführen, werden die Skripts für jedes Modul beim Starten der .jmpapp einbezogen? Oder werden die Skripte für jedes Modul beim << Instanz erstellen tatsächlich separat übermittelt, sodass jedes Modul seinen eigenen Here-Namespace hat?
Kurz gesagt: Bezieht sich Here bei der Verwendung einer JMP-App normalerweise auf jedes Modul oder auf die App als Ganzes?Betreff: Integrierte Namespace-Nutzung, Namen standardmäßig hier, lokale FunktionsvariablenNames Default To Here(1) bedeutet, dass alle unqualifizierten Symbole dabei verwendet/erstellt werden Vorlage (Ausführen eines Skripts) befindet sich im selben Here-Namespace. Es ist also umfassender als nur eine einzelne JSL-Datei. Wenn also A.jsl B.jsl einschließt, während „Names Default To Here“ aktiviert ist, sind die von A und B erstellten Symbole beide im selben Here-Namespace verfügbar.
Für Funktions-Locals sollten Sie eine Locals-Liste verwenden:
/* Default Local */
slow identity = Function({x}, {Default Local},
x squared = x*x; // unqualified name x squared is defaulted to function local
Sqrt(x squared)
);
/* Or list them explicitly */
slow identity = Function({x}, {x squared},
x squared = x*x; // local because we declared it above
Sqrt(x squared)
);
/* Or qualify them */
slow identity = Function({x},
local:x squared = x*x; // qualify to local explicitly
Sqrt(x squared)
);Betreff: Integrierte Namespace-Nutzung, Namen standardmäßig hier, lokale FunktionsvariablenHmm, tut mir leid wegen der Formatierung dort
//Script to define different scopes of variables
Names Default to Here(1); //set variables to be scoped to this script by default
a = 1;
b = 2;
Function1 = Function({},
Names Default to Here(1); //set variables set in Function1 to be scoped only to Function1
c = 3;
);
Function2 = Function({},
Names Default to Here(1); //set variables set in Function2 to be scoped only to Function2
d = 4;
);