Hola a todos,
Tengo un script de ejemplo simple. ¿Alguien puede explicarme cuáles son los alcances de las variables aquí y por qué funciona de una manera y no de otra?
Aquí está el guión inicial:
Names default to here(1);
Clear Globals();
x="Variable";
exprA = Expr(Write("Here is variable: "||x));
exprB = Expr(
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );dt1 << OnClose(exprA));
exprB;La idea es que abro la tabla y le doy una expresión que necesita para ejecutarse cuando está cerrada. Expression evalúa y cambia (no en este ejemplo) algunas variables del script.
La forma en que está escrito no funciona, no pasa nada, pero en mi guión real simplemente dice que no puede encontrar una referencia.
Bien, intentemos hacer que ExprA sea global:
Names default to here(1);
Clear Globals();
x="Variable";
::exprA = Expr(Write("Here is variable: "||x));
exprB = Expr(
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );dt1 << OnClose(exprA));
exprB;Ahora sí ve la expresión, pero sigue sin funcionar, porque ahora no ve la variable x.
Ok, hagamos x global también:
Names default to here(1);
Clear Globals();
::x="Variable";
::exprA = Expr(Write("Here is variable: "||x));
exprB = Expr(
dt1 = Open( "$SAMPLE_DATA/Big Class.jmp" );dt1 << OnClose(exprA));
exprB;Ahora funciona:
Scriptable[]Here is variable: Variable
// Close Data Table: Big Class
Close( "Big Class" );
La pregunta: ¿por qué funciona de esta manera y no funciona de la manera inicial? Me miré, debería haber funcionado.
No me gusta usar variables globales en este script, ¿alguna otra forma de hacerlo funcionar?