07/02/22 00:27:58
>>126
いえいえ半分愚痴なんで。
たとえば>>118を以下の様に書き換えると
a=456
function f1(e)
setfenv(1,e) ;print(a) -- 123が表示
end
function f2(f)
--ここからシンタックスシュガー
local org_env=getfenv(1)
local local_env={}
setfenv(1,setmetatable(local_env,{__index=org_env}))
--ここまでシンタックスシュガー
-- aはローカル
a=124
f(local_env)
-- print($a) グローバルなaを表示 =>
print(org_env["a"]) -- 456が表示
end
f2(f1)
print(a) -- 456が表示
関数先頭でローカル環境設定して
むしろlocalが指定されていないときをlocal変数
と解釈し、Rubyみたく$a見たいに記述された時を
グローバル変数と解釈するほうが安全なようなきがする。
関数内でlocal宣言し忘れてうっかりグローバル汚す
心配もないし。