Comment évaluer sélectivement les variables dans New Script() tout en préservant Expr() pour une évaluation différée ?Je crée un script de table de données en utilisantNew Script()Cela doit être évalué ultérieurement lorsqu'un utilisateur clique dessus. Je dois substituer certaines variables lors de la création du script (comme un chemin de fichier) tout en préservantExpr()appels qui ne doivent être évalués que lorsque le script s'exécute réellement.
file_path = "C:\MyData\slopes.jmp";
dt << New Script("Plot Slopes",
dt_slopes = Open( file_path );
slope_array = dt_slopes:slope << Get Values;
nw = New Window( "Slope Plots",
gb = Graph Box()
);
framebox = gb[Frame Box(1)];
For Each( {slope}, slope_array,
Eval( Eval Expr(
framebox << Add Graphics Script(
Y Function( Expr(slope) * x, x );
);
));
);
);
Le problème: I need file_path to be evaluated and inserted as a literal string when creating the script, but the Expr(slope) inside the For Each loop must remain unevaluated until the script runs (when the user clicks it).
If I wrap everything in Eval(Eval Expr()) to substitute file_path, it also evaluates Expr(slope)prematurely, causing an error since slope doesn't exist yet.
Quelle est la bonne approche pour évaluer de manière sélective certaines variables tout en préservant d’autres pour une évaluation différée dans les scripts de table de données stockées ?
Automatisation et scriptsRe : Comment évaluer sélectivement les variables dans New Script() tout en préservant Expr() pour une évaluation différée ?Une option consiste à ajouter un Expr(Name Expr()) à votre code
Names Default To Here(1);
file_path = "C:\MyData\slopes.jmp";
Eval(EvalExpr(
dt << New Script(
"Plot Slopes",
dt_slopes = Open(Expr(file_path));
slope_array = dt_slopes:slope << Get Values;
nw = New Window("Slope Plots", gb = Graph Box());
framebox = gb[Frame Box(1)];
Expr(Name Expr(For Each({slope}, slope_array,
Eval(Eval Expr(framebox << Add Graphics Script(Y Function(Expr(slope) * x, x))))
)));
);
));
Lorsque vous exécutez uniquement la partie EvalExpr, vous obtiendrez le script suivant
dt << New Script(
"Plot Slopes",
dt_slopes = Open("C:\MyData\slopes.jmp");
slope_array = dt_slopes:slope << Get Values;
nw = New Window("Slope Plots", gb = Graph Box());
framebox = gb[Frame Box(1)];
For Each({slope}, slope_array,
Eval(
Eval Expr(
framebox << Add Graphics Script(Y Function(Expr(slope) * x, x))
)
)
);
)

Re : Comment évaluer sélectivement les variables dans New Script() tout en préservant Expr() pour une évaluation différée ?belle astuce :
expr(nom expr()) comme synonyme de protéger()
peut-être voter ici :
2 fonctions pour les 2 significations de expr()