ループ変数にアクセスしたときに、実行によって 'undefined' が返されるのはなぜですか。

MAXScript に関する質問と回答 > MAXScript 値の操作 > ループ変数にアクセスしたときに、実行によって 'undefined' が返されるのはなぜですか。

次のコードでは、Execute() 関数を使用して文字列 "x" を格納した変数 var をループ変数「x」に変換し、その値を出力します。ここでは、番号 1 ~ 10 が出力される代わりに「undefined」が 10 回返されます。

失敗する理由は次のとおりです。

var ="x"
for x = 1 to 10 do
(
  y = execute var
  print y
)

この質問の答えは、Execute が常に グローバル スコープを使用するという事実に基づいています。一方、for ループは常に新しいスコープを作成し、変数「x」はこのスコープに対してローカルです。これが、当初の問題とその解決方法を理解する上で重要な点です。つまり、Execute はグローバル スコープ内ではローカル変数「x」を「参照しない」のです。

番号 1 ~ 10 を正しく出力するための考えられる解決方法を次に示します。

例:

global x --define a global stand-in variable for executing
var = "x" --define the string to execute
for xx = 1 to 10 do--the loop has a different var name
(
  x = xx --copy the loop variable into global scope
  y = execute var --execute in global scope
  print y --print the result
)

関連事項