Hallo an alle,
Beim Zurückgeben eines Ausdrucks von einer Funktion bin ich auf ein seltsames Verhalten gestoßen und konnte bisher keine Diskussionen darüber finden. Ich habe die Angewohnheit, Namespaces für so ziemlich alles zu verwenden. Ich habe festgestellt, dass, wenn eine Funktion einen Ausdruck zurückgibt, der Ausdruck nicht für eine Funktion ohne Gültigkeitsbereich ausgewertet wird, sondern ausgewertet wird, wenn ein Namespace verwendet wird. Weiß jemand, was hier los ist?
Dieses Skript sollte zeigen, dass die Variable x nicht beim Aufruf der ersten Funktion, sondern beim zweiten Funktionsaufruf inkrementiert wird. Ich verwende JMP v17.0.0, daher wurde das Problem möglicherweise behoben, aber ich kann derzeit kein Update durchführen.
NewNamespace("varNamespace");
varNamespace:x = 0;<BR />
myFunc = Function({},
{DEFAULTLOCAL},
returnVal = Expr(varNamespace:x++);
NameExpr(returnVal);
);
myFunc();
Show(varNamespace:x);
NewNamespace("functionTest");
functionTest:myFunc = Function({},
{DEFAULTLOCAL},
returnVal = Expr(varNamespace:x++);
NameExpr(returnVal);
);
functionTest:myFunc();
show(varNamespace:x);