Das Verhalten des Variablenbereichs für print() sollte dem gesamten anderen Verhalten entsprechen.Was hat diesen Wunschwunsch ausgelöst?
Ich habe viel Zeit mit der Fehlersuche in Bezug auf den Gültigkeitsbereich von Variablen verbracht. Wenn `{default local}` innerhalb einer Funktion verwendet wird (was ich fast immer tue), kann die Funktion nicht auf globale Variablen zugreifen, es sei denn, der Gültigkeitsbereich wird explizit mit `::` angegeben (was mir nicht bewusst war). Die Funktion `Print()` sucht jedoch auch ohne `::` stillschweigend nach sich selbst – und da `Print()` ein recht einfaches Debugging-Werkzeug ist, ist das sehr verwirrend!
Welche Verbesserung würden Sie sich wünschen?
Die Funktion print() sollte sich hinsichtlich des Gültigkeitsbereichs von Variablen genauso verhalten wie alle anderen Funktionen.
Warum ist diese Idee wichtig?
Das aktuelle Verhalten ist unlogisch und widersprüchlich.
JMP19.1.1.
Automatisierung und SkripterstellungBetreff: Verhalten von print() im Variablenbereich sollte mit allen anderen Funktionen übereinstimmen – Status geändert in: Informationen erforderlichHallo @JohnJoyceFlusso – vielen Dank für Ihren Wunsch. Könnten Sie ein Skript bereitstellen, das dieses Verhalten veranschaulicht?
Betreff: Das Verhalten von print() im Variablenbereich sollte mit allem anderen übereinstimmenHier ist ein minimales Skript, das das Problem veranschaulicht: Print() funktioniert, msgbox() jedoch nicht.
Hinweis: Dies ist keine nützliche Funktion, sondern dient lediglich der Veranschaulichung des Problems.
Leider verhält sich Print() in Bezug auf den Gültigkeitsbereich von Variablen anders als alle anderen Funktionen.
Mir ist noch nie eine andere Sprache begegnet, die so etwas tut. Das scheint fehlerhaft zu sein.
Mein Vorschlag ist, dass Print() sich nicht von allem anderen unterscheiden sollte.
dummy = "Hello";
test = Function( {},
{default local},
Print( dummy );
msgbox( dummy );
);
test();
Betreff: Das Verhalten von print() im Variablenbereich sollte mit allem anderen übereinstimmenEntschuldigung für die Verwirrung mit msgbox(), das ist tatsächlich meine eigene Funktion und nicht integriert.
Hier ist ein Beispiel, das meinen Punkt verdeutlicht ... der erste Versuch mit Optionsfeldern zeigt keine Optionen an, da "options" nicht lokal definiert ist; und doch kann print() auf magische Weise darauf zugreifen.
Sobald ich die Optionen lokal definiere, funktionieren die gleichen Optionsfelder auch beim zweiten Mal.
Der springende Punkt ist, dass print() sich nicht anders verhalten sollte als alles andere, da die Verwendung als Debug-Werkzeug sonst etwas problematisch wird.
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
New Window( "Pick one",
<
<MODAL></MODAL>
<BR /> <BR />
Betreff: Das Verhalten von print() im Variablenbereich sollte mit allem anderen übereinstimmen@JohnJoyceFlusso
Sie können weiterhin innerhalb der Funktion auf die Variable "options" zugreifen, indem Sie eval( eval expr() ) verwenden. Das funktioniert bei mir:
options = {"A", "B"};
test = Function( {},
{default local},
Print( options );
eval( eval expr( New Window( "Pick one",
<
<MODAL></MODAL>
Betreff: Das Verhalten von print() im Variablenbereich sollte mit allem anderen übereinstimmenDanke, ja, das tut es (ebenso wie der Zugriff auf 'options' als ::options, worauf mich die Supportmitarbeiter hingewiesen haben).
Mein Problem bleibt, dass sich Print() anders verhält als alles andere, was unlogisch ist.