これはすでにどこかに投稿されていると確信していますが、見つけることができませんでした。
変数のスコープがJSLでどのように処理されるか混乱しています。誰かがそれがどのように機能するかを明確にするのを助けることができますか.
ほとんどの場合、ループのインデックス変数として i を使用します。たとえば、私のスクリプトでは、別の関数を呼び出すインデックスとして i を使用する for ループがあります。この関数には、i をインデックスとする別の for ループがあります。これは C/Java/etc では決して問題ではありません。jslで動作する場合とそうでない場合があるようです。問題が発生した場所を正確に把握できなかったため、例はありません。ただし、JSLの変数の範囲の基本的な理解だと思います。
JSLでは、変数は、「i」と呼ばれる変数の例を使用して、次のように記述されています
名前空間:i
名前空間を設定するために何も指定されていない場合、正式な仕様は次のとおりです。
::私
JSL のデフォルトの名前空間は ":" という名前の名前空間なので……かなり奇妙ですが、これには歴史的な理由があります。だから入ったら
私は= 7;
JMPが見ているものは次のとおりです。
::i = 7;
したがって、JSL スクリプトの任意の部分で変数 i が変更され、後で参照されると、新しい値が設定されます。
showit = Function( {I},
Show(I);
);
I = 2;
showit(I);
I=3;
showit(I);
戻ります
I = 2;
I = 3;
これで、変数を関数に対してローカルにすることで、関数は変数を分離できます。
showit = Function( {I},{I},
I=55;
Show(I);
);
I = 2;
showit(I);
show(i);
このコードの結果は次のとおりです。
I = 55;
i = 2;
グローバルに使用するための i の値が変更されていないことに注意してください。
最後の混乱のために:
i の値は変更可能であり、その後のすべての i の使用はその変更を反映すると言いましたが、これは、実行中のさまざまなスクリプトでも変更されることを意味します。そのため、変数 i を含む新しいスクリプトを実行すると、以前の JSL スクリプトで設定された i の値が設定されます。したがって、ステートメント「Names Default to Here( 1 );」実施されました。このステートメントは 2 つのことを行います。まず、ネームスペースを「:」から「Here」に変更します。次に、「Here」ネームスペース内のすべての変数を、実行中のスクリプト内の変数のみに分離します。したがって、次のスクリプトがある場合
Names Default to Here( 1 );
i = 7;
変数 i のこのインスタンスは、スクリプト内で i を使用することによってのみ変更されます。他のスクリプトは、その変数 i の変更にアクセスできません。
PS 変数 i の正式な説明は次のとおりです。
ここ:私
「Names Default to Here( 1 );」の後に、スクリプトで作成されたスクリプト内の任意の変数ステートメントは自動的にネームスペース call Here に配置されます。
Names Default to Here( 1 );
i = 7;
show(here:i)
「here:」を使用して、there here 名前空間内の変数を明示的に指定することはできませんか?
列のアドレスが、たとえば「 :セックス 」経由であるのはなぜですか。
空の名前空間は「現在のデータテーブル() 」を意味しますか?