Insérer un objet Expr() dans un autre script en tant qu'objet Expr() non évalué à utiliser ultérieurement ?En complément de la réponse de @jthi dans Insérer le contenu de l'expression d'analyse plutôt que le nom de la variable dans un nouveau script , comment insérer un objet Expr() dans un autre script en tant qu'objet Expr() non évalué à utiliser ultérieurement ?
J'utilise JMP 18.1.2
Names Default To Here( 1 );
dt = New Table( "My Table" );
e1 = Expr(
Print( "Run some code." )
);
e2 = Expr(
e1;
Print( "Run some other code." );
);
e3 = Eval Expr(
Expr( Name Expr( e1 ) ); // Define, but do not evaluate e1 here.
Expr( Name Expr( e2 ) ); // Evaluate e1 here.
);
Show( e3 );
Eval( Eval Expr( dt << New Script( "Test", Expr( Name Expr( e3 ) ) ) ) );
Automatisation et scriptsWindowsRe : Insérer un objet Expr() dans un autre script en tant qu'objet Expr() non évalué à utiliser ultérieurement ?Une astuce sympa dans JMP :
vous pouvez appuyer sur la touche Entrée du clavier numérique pour exécuter une ligne de code.
Ceci est très utile pour le débogage.
une autre astuce :
faites un clic droit dans la fenêtre de script et activez :

la dernière astuce :
marquez l' Évaluer l'expression(...) à l'intérieur d'un Évaluer() et « exécutez-le » pour vérifier si l'expression est ce que vous attendez :

Cela montre que là où vous écrivez
// Evaluate e1 here.
Nom Expr prend simplement l'expression stockée dans la variable. Elle ne l'évalue pas. e1 reste e1 .
Modifier:
Mais peut-être est-ce là ce que vous souhaitez accomplir ? Pas de question, juste un commentaire ?
Le script JSL écrira « e1 » dans le script de table.
Et JMP essaiera d'évaluer e1 lorsque l'utilisateur exécute le script de table.
Cela signifie : vous devez définir e1 dans le contexte de la table de données, sinon vous obtiendrez un message d'erreur :

[e1 est simplement défini dans l'espace de noms ici du script]
Re : Insérer un objet Expr() dans un autre script en tant qu'objet Expr() non évalué à utiliser ultérieurement ?Je ne suis pas sûr de ce que vous recherchez, car e1 est déjà défini à la ligne 5. Que souhaitez-vous avoir dans e3 ? Quelque chose comme ça.
e1 = Expr(Print("Code"));
e1; //e2
Print("Code2"); //e2
Ou
e1 = Expr(Print("Code"));
Print("Code");
Print("Code2"); //e2Re : Insérer un objet Expr() dans un autre script en tant qu'objet Expr() non évalué à utiliser ultérieurement ?Merci à @hogi et @jthi pour leurs contributions. J'ai pu obtenir le résultat escompté grâce à une fonction.
Names Default To Here( 1 );
dt = New Table( "My Table" );
e1 = Expr(
f1 = Function( {},
{Default Local},
Print( "Run some code." )
)
);
e2 = Expr(
f1();
Print( "Run some other code." );
);
e3 = Expr(
f1();
Print( "Run even more code." );
);
e4 = Eval Expr(
Expr( Name Expr( e1 ) ); // Define, but do not evaluate e1 here.
Expr( Name Expr( e2 ) ); // Evaluate e1 here.
Expr( Name Expr( e3 ) ); // Evaluate e1 here.
);
Eval( Eval Expr( dt << New Script( "Test", Expr( Name Expr( e4 ) ) ) ) );Re : Insérer un objet Expr() dans un autre script en tant qu'objet Expr() non évalué à utiliser ultérieurement ?Vous pouvez également l'envelopper dans des Expr supplémentaires
Names Default To Here(1);
dt = New Table("My Table");
e0 = Expr(e1 = Expr(Print("Run some code.")));
e2 = Expr(
e1;
Print("Run some other code.");
);
e3 = Eval Expr(
Expr(Name Expr(e0)); // Define, but do not evaluate e1 here.
Expr(Name Expr(e2)); // Evaluate e1 here.
);
Show(e3);
Eval(Eval Expr(dt << New Script("Test", Expr(Name Expr(e3)))));

Re : Insérer un objet Expr() dans un autre script en tant qu'objet Expr() non évalué à utiliser ultérieurement ?Très intelligent ! Merci.