大家好,
我有一个简单的示例脚本。 有人可以解释一下这里变量的范围是什么以及为什么它以一种方式而不是另一种方式工作吗?
这是初始脚本:
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;这个想法是我打开表并给它一个在它关闭时需要运行的表达式。 表达式计算并更改(不在此示例中)脚本中的一些变量。
它的编写方式不起作用 - 没有任何反应,但在我的真实脚本中它只是说它找不到参考。
好的,让我们尝试使 ExprA 全球化:
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;现在它确实看到了表达式,但它仍然不起作用,因为现在它没有看到 x 变量。
好的,让我们也将 x 设为全局:
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;现在它起作用了:
Scriptable[]Here is variable: Variable
// Close Data Table: Big Class
Close( "Big Class" );
问题:为什么它以这种方式工作,而不是以最初的方式工作? 我看着我它应该工作。
我不喜欢在这个脚本中使用全局变量——还有其他方法可以让它工作吗?