Qu'est-ce qui ne va pas ici ? Problème d'expression dans Formula()Attention - JMP va planter !!!
Names Default To Here( 1 );
f = Function( {},
/* .... */
ID = Associative Array( {{Name Expr(), 1}, {Expr(), 2}, {Function(), 3}}, 0 );<BR />/* .... */
);
f();
supprimer la fonction() de la liste corrige l'erreur.
Retirer le tableau associatif de la fonction externe corrige l'erreur.
[modifier] une motivation expliquant pourquoi cela peut être utile :
en tant que table de recherche pour les parties d'expressions - identifiées via Head() et 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: 3Automatisation et scriptsRe : Qu'est-ce qui ne va pas ici ?JMP est vraiment époustouflant. Vous venez d'inventer une nouvelle façon rapide de quitter une session JMP...
Cela doit être adressé au support JMP ! Ce genre de choses n'est pas censé se produire.
Re : Qu'est-ce qui ne va pas ici ?J'en ai un autre :
Attention - JMP va planter !!!
x = Expr(Function());
Show(name Expr(x) == Expr(Function()));
Print("not dead");
f = function({arg},
name Expr(arg) == Expr(Function()))en dehors de la fonction la comparaison de x avec Function() est OK.
À l'intérieur de la fonction, JMP plantera déjà lorsqu'il verra la commande - pas besoin d'appeler f .
Re : Qu'est-ce qui ne va pas ici ?du support JMP (TS-00166834) :
Il existe un problème connu où JMP plante lors de l'utilisation d'une fonction mal formée dans une autre fonction.
Ainsi, la cause profonde peut être réduite à
Attention - JMP va planter !!!
f = Function( {}, Expr(Function()));
... l'air si innocent.
Définition de fonction mal formée : oui. Mais il s'agit d'une expression JSL « bien formée » selon
@joseph_morgan / Utilisation de JSL pour développer des applications efficaces et robustes (UE 2018 415) .
Il est donc surprenant que JMP ne puisse pas vivre avec cela.
La fonction à l'intérieur de la fonction me rappelle l'étrangeté de JMP Expr(), quelqu'un peut-il expliquer ? / @ErraticAttack .
Outre les utilisateurs, JMP rencontre également des problèmes lorsqu'une expression apparaît à différents niveaux. Insérer dans : Aplatir(0|1) ou @Substituer la première occurrence pourraient donc aider JMP ?

Les suggestions du support JMP :
Il existe plusieurs autres solutions pour éviter ce plantage. L'une d'elles consiste à utiliser les accolades ({}) comme argument obligatoire dans la fonction interne. L'autre consiste à supprimer les parenthèses après le mot « Fonction » dans la fonction interne.
malheureusement aucune aide pour le cas d'application ci-dessus.
Re : Qu'est-ce qui ne va pas ici ?Une solution de contournement :
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)))]
mais ça fait un peu "mal"...

Re : Qu'est-ce qui ne va pas ici ?J'aime beaucoup plus celui-ci :
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))];
Cela ne peut pas fonctionner, après l' eval expr ce sera plus ou moins le même qu'avant...
... Ouah!
NB : Expr() ne survivra pas à l' Eval Expr - il doit donc être protégé.
Re : Qu'est-ce qui ne va pas ici ?-
Re: Quel est le problème ici ? Problème d'expression dans Formula()En fait, j'ai soumis ce rapport de bogue il y a quelques jours ! J'ai découvert que l'utilisation de Expr(Function()) à l'intérieur d'une fonction provoque un crash. Je l'utilisais dans le contexte de
Substitute(my_expr, Expr(Function()), Expr(Method()))
Mais j'ai pu m'en sortir en utilisant Expr(Function) à la place.
Pour votre problème, une autre solution possible si vous ne souhaitez pas analyser les chaînes est de faire quelque chose comme ceci
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())));Même si ce n'est toujours pas vraiment « joli ».
Re: Quel est le problème ici ? Problème d'expression dans Formula()Head(Expr(Function()))
bon!
bien meilleur que mon Eval( ... Parse( ... surtout après avoir cité Joseph
