Was ist hier falsch? Ausdrucksproblem in Formel()Achtung – JMP wird abstürzen!!!
Names Default To Here( 1 );
f = Function( {},
/* .... */
ID = Associative Array( {{Name Expr(), 1}, {Expr(), 2}, {Function(), 3}}, 0 );<BR />/* .... */
);
f();
Das Entfernen der Funktion () aus der Liste behebt den Fehler.
Das Entfernen des assoziativen Arrays aus der äußeren Funktion behebt den Fehler.
[Bearbeiten] eine Begründung, warum dies hilfreich sein kann:
als Nachschlagetabelle für Teile von Ausdrücken - identifiziert über Head() und Type():
myID = ID[Expr(function())]; // expected: 3
code = Expr(g = function ({x},1));
Head(Arg(code,2)); // function()
myID = ID[Head(Arg(code,2))]; // expected: 3Automatisierung und SkriptingBetreff: Was ist hier falsch?Es übertrifft JMP auf jeden Fall. Sie haben gerade eine neue schnelle Möglichkeit erfunden, eine JMP-Sitzung zu beenden......
Dies muss an den JMP-Support weitergeleitet werden! So etwas sollte nicht passieren.
Betreff: Was ist hier falsch?Ich habe noch eins:
Achtung – JMP wird abstürzen!!!
x = Expr(Function());
Show(name Expr(x) == Expr(Function()));
Print("not dead");
f = function({arg},
name Expr(arg) == Expr(Function()))Außerhalb der Funktion ist der Vergleich von x mit Function() in Ordnung.
Innerhalb der Funktion stürzt JMP bereits ab, wenn es den Befehl sieht – ein Aufruf von f ist nicht erforderlich.
Betreff: Was ist hier falsch?vom JMP-Support (TS-00166834):
Es gibt ein bekanntes Problem, bei dem JMP abstürzt, wenn eine fehlerhafte Funktion in einer anderen Funktion verwendet wird.
Die Ursache kann also eingegrenzt werden auf
Achtung – JMP wird abstürzen!!!
f = Function( {}, Expr(Function()));
... sieht so unschuldig aus.
fehlerhafte Funktionsdefinition - ja. Aber es ist ein "wohlgeformter" JSL-Ausdruck gemäß
@joseph_morgan / Verwenden von JSL zur Entwicklung effizienter, robuster Anwendungen (EU 2018 415) .
Daher ist es überraschend, dass JMP damit nicht leben kann.
Funktion innerhalb von Funktion erinnert mich an die Merkwürdigkeit von JMP Expr(), kann das jemand erklären? / @ErraticAttack .
Neben den Benutzern hat auch JMP Probleme, wenn ein Ausdruck auf verschiedenen Ebenen angezeigt wird. Könnten „Insert Into: Flatten(0|1)“ oder „@Substitute First Occurence “ JMP vielleicht sogar helfen?

Die Vorschläge vom JMP-Support:
Es gibt noch einige weitere Möglichkeiten, den Absturz zu verhindern. Eine Möglichkeit besteht darin, die geschweiften Klammern ({}) als erforderliches Argument in die interne Funktion einzufügen. Eine andere Möglichkeit besteht darin, die Klammern nach dem Wort „Function“ in der internen Funktion zu entfernen.
leider keine Hilfe für den Anwendungsfall von oben.
Betreff: Was ist hier falsch?Eine Problemumgehung:
f = Function( {},
/* .... */
ID = Associative Array( {{"Name Expr()", 1}, {"Expr()", 2}, {"Function()", 3}}, 0 );
/* .... */
);
f();
code = Expr(g = function ({x},1));
myID=ID[Char(Head(Arg(code,2)))]
aber es "tut" ein bisschen weh...

Betreff: Was ist hier falsch?Das hier gefällt mir viel besser:
f = Function( {},
/* .... */
Eval (Eval Expr(ID = Associative Array( {{Name Expr(), 1}, {Expr(Parse("Expr()")), 2}, {Expr(Parse("Function()")), 3}}, 0 )));
/* .... */
);
f;
code = Expr(g = function ({x},1));
myID=ID[Head(Arg(code,2))];
Das kann nicht funktionieren, nach dem Auswertungsausdruck wird es mehr oder weniger dasselbe sein wie vorher ...
... Wow!
NB: Expr() überlebt das Eval Expr nicht – muss also geschützt werden.
Betreff: Was ist hier falsch?-
Betreff: Was ist hier falsch? Ausdrucksproblem in Formel()Ich habe diesen Fehlerbericht tatsächlich erst vor ein paar Tagen eingereicht! Ich habe festgestellt, dass die Verwendung von Expr(Function()) innerhalb einer Funktion einen Absturz verursacht. Ich habe es im Kontext von verwendet
Substitute(my_expr, Expr(Function()), Expr(Method()))
Habe es aber stattdessen mit Expr(Function) geschafft.
Für Ihr Problem, wenn Sie keine Zeichenfolgen analysieren möchten, ist eine andere mögliche Lösung, etwas wie dies zu tun
y = Function({head_key},
ID = Associative Array( EvalList({{Name Expr(), 1}, {Expr(), 2}, EvalList({Head(Expr(Function({},1))), 3})}), 0 );
ID[NameExpr(head_key)]
);
Show(y(Expr(Function())));Obwohl es immer noch nicht gerade „hübsch“ ist.
Betreff: Was ist hier falsch? Ausdrucksproblem in Formel()Head(Expr(Function()))
Hübsch!
viel besser als mein Eval( ... Parse( ... vor allem nach dem Zitieren von Josephs
