Bonjour à tous,
J'ai un exemple de script simple. Quelqu'un peut-il m'expliquer quelles sont les portées des variables ici et pourquoi cela fonctionne d'une manière et pas d'une autre?
Voici le script initial :
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;L'idée est que j'ouvre la table et lui donne une expression dont elle a besoin pour s'exécuter lorsqu'elle est fermée. Expression évalue et modifie (pas dans cet exemple) certaines variables du script.
La façon dont il est écrit ne fonctionne pas - rien ne se passe, mais dans mon vrai script, il dit simplement qu'il ne peut pas trouver de référence.
Bon, essayons de rendre ExprA 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;Maintenant, il voit l'expression, mais cela ne fonctionne toujours pas, car il ne voit plus la variable x.
Ok, rendons x global aussi :
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;Maintenant ça marche:
Scriptable[]Here is variable: Variable
// Close Data Table: Big Class
Close( "Big Class" );
La question : pourquoi cela fonctionne-t-il de cette façon et ne fonctionne-t-il pas de la manière initiale ? J'ai regardé moi ça aurait dû marcher.
Je n'aime pas utiliser des variables globales dans ce script - une autre façon de le faire fonctionner ?