秀丸マクロのevalコマンドで実行されるコードのスコープ
変数のスコープ
-------------------------
code:sample1.mac
call test1;
call dbgoutln "+ $var2 + "";
endmacro;
test1:
eval "$$var1 = \"aaa\"; $var2 = \"bbb\";";
call dbgoutln "+ $$var1 + "";
call dbgoutln "+ $var2 + "";
return;
※ dbgoutlnは自作の出力サブルーチンです(アウトプット枠に引数の文字列を出力する)。
code:result
これにより、evalで評価されるコードとeval呼び出し元のコードは共通の変数スコープを持っていることがわかります。
ラベルのスコープ
-----------------------------
code:sample2.mac
$code = "call dbgoutln, \"xxx\"";
eval $code;
このマクロを実行すると「goto/callの飛び先のラベルが見つかりません」というようなエラーダイアログが表示されます。
これにより、evalで評価されるコードとeval呼び出し元のコードは共通のラベルスコープを持っていないことがわかります。
(2019-10-14)