こんにちは皆さん、
簡単なサンプルスクリプトがあります。 誰かがここで変数のスコープは何であり、なぜそれが別の方法ではなくある方法で機能するのかを説明できますか?
最初のスクリプトは次のとおりです。
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" );
質問:なぜそれがこのように機能し、最初の方法で機能しないのですか? 私はそれがうまくいくはずだったと私に見ました。
このスクリプトでグローバル変数を使用するのは好きではありません-それを機能させる他の方法はありますか?