¿Insertar un objeto Expr() en otro script como un objeto Expr() no evaluado para ser utilizado más adelante?Agregando a la respuesta de @jthi en Insertar contenidos de la expresión Parse en lugar del nombre de la variable en el nuevo script , ¿cómo insertar un objeto Expr() en otro script como un objeto Expr() no evaluado para ser utilizado más adelante?
Estoy usando 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 ) ) ) ) );
Automatización y scriptingVentanasRe: ¿Insertar un objeto Expr() en otro script como un objeto Expr() no evaluado para ser utilizado más adelante?Un buen truco en JMP:
Puede presionar la tecla Enter en el teclado numérico para ejecutar una línea de código.
Esto es muy útil para la depuración.
Otro truco:
Haga clic derecho en la ventana del script y active:

El último truco:
Marca Eval Expr(...) dentro de un Evaluar() y "ejecútalo" para verificar si la expresión es la que esperas:

Esto demuestra que donde escribes
// Evaluate e1 here.
El nombre Expr solo toma la expresión almacenada en la variable. No la evalúa. e1 permanece como e1 .
Editar:
¿Pero quizás esto es lo que quieres lograr? Sin duda, ¿solo un comentario?
El script JSL escribirá "e1" en el script de la tabla.
Y JMP intentará evaluar e1 cuando el usuario ejecute el script de tabla.
Esto significa: debes definir e1 en el contexto de la tabla de datos, de lo contrario recibirás un mensaje de error:

[e1 simplemente se define dentro del espacio de nombres aquí del script]
Re: ¿Insertar un objeto Expr() en otro script como un objeto Expr() no evaluado para ser utilizado más adelante?No estoy seguro de qué buscas, ya que e1 ya se definió en la línea 5. ¿Qué deseas tener dentro de e3? Algo como esto.
e1 = Expr(Print("Code"));
e1; //e2
Print("Code2"); //e2
O
e1 = Expr(Print("Code"));
Print("Code");
Print("Code2"); //e2Re: ¿Insertar un objeto Expr() en otro script como un objeto Expr() no evaluado para ser utilizado más adelante?Gracias a @hogi y @jthi por sus aportaciones. Logré el resultado que buscaba usando una función.
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: ¿Insertar un objeto Expr() en otro script como un objeto Expr() no evaluado para ser utilizado más adelante?También puedes envolverlo en Expr extra
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: ¿Insertar un objeto Expr() en otro script como un objeto Expr() no evaluado para ser utilizado más adelante?¡Muy inteligente! Gracias.