大家好,
我有一個簡單的示例腳本。 有人可以解釋一下這裡變量的範圍是什麼以及為什麼它以一種方式而不是另一種方式工作嗎?
這是初始腳本:
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" );
問題:為什麼它以這種方式工作,而不是以最初的方式工作? 我看著我它應該工作。
我不喜歡在這個腳本中使用全局變量——還有其他方法可以讓它工作嗎?