こんにちは。メインの JSL スクリプトに「namesdefault to here(1)」があり、後でいくつかのダウンストリーム JSL スクリプトに「インクルード」を実行します。これらのダウンストリーム JSL の一部は、表示専用に暗号化されています。
メインの JSL スクリプトを実行すると、次のエラーが発生します。
「名前が未解決: {13} のアクセスまたは評価「、」 「/*###*/」
これはバグですか? (JMP 14.3.0)
なぜ暗号化されたスクリプトで終了する必要があるのでしょうか?このコマンドを使用するために他の JSL スクリプトの暗号化を解除したくありません。それ以外の場合、おそらくこれを回避する方法はありますか?私は何百ものグローバルを持っているので、それぞれに特定の名前空間を使用しないようにしたいと考えていました。
ありがとう! DJ
これは単なる推測ですが、スコープ エラーが発生している可能性があります。使用するとき
Names Default To Here( 1 );
JMP は文字通り Here という名前空間を作成し、スコープ外の変数をすべて変換します。
Variable Name = 1;
に
Here:Variable Name = 1;
スコープの問題では、祖父母化されたスコープ構文が考えられる場合があります。
以前に Names Default to Here(1) が指定されていなかった JSL では、次の代入ステートメントは同等でした。
Y=1;
::Y=9;
Show(Y, ::Y);
この JSL の結果は次のとおりです。
Y = 9;
Y = 9;
ただし、Names Default to Here(1) が指定されている場合
Names Default To Here( 1 );
Y = 1;
::Y = 9;
Show( Y, ::Y, here:Y );
結果を与える
Y = 1;
Y = 9;
here:Y = 1;
このトピックについてとりとめのない話をした結果、暗号化されたコードがどこかにあり、二重コロン、「::」スコープが指定され、二重コロンを指定せずに参照されているのではないかと推測できます。 Names Default to Here(1) を指定すると、二重コロンのない参照により、JSL がこれまでに見たことのない変数名が生成され、例外エラーがスローされます。