¿Cómo evaluar selectivamente variables en New Script() mientras se preserva Expr() para la evaluación diferida?Estoy creando un script de tabla de datos usandoNew Script()que debe evaluarse posteriormente cuando un usuario hace clic en él. Necesito sustituir algunas variables al crear el script (como la ruta de un archivo) y conservarExpr()llamadas que solo deben evaluarse cuando el script realmente se ejecuta.
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 );
);
));
);
);
El problema: 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.
¿Cuál es el enfoque correcto para evaluar selectivamente algunas variables y preservar otras para una evaluación diferida en scripts de tablas de datos almacenados?
Automatización y scriptingRe: ¿Cómo evaluar selectivamente variables en New Script() mientras se preserva Expr() para la evaluación diferida?Una opción es agregar algo de Expr(Name Expr()) a su código
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))))
)));
);
));
Cuando ejecutas solo la parte EvalExpr, obtendrás el siguiente script
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: ¿Cómo evaluar selectivamente variables en New Script() mientras se preserva Expr() para la evaluación diferida?Buen truco:
expr(nombre expr()) como sinónimo de proteger()
Quizás vote aquí:
2 funciones para los 2 significados de expr()