そのため、Lua のグローバルなデフォルト スタイルにイライラするようになりました。その後に実行されるすべてのプログラムがグローバル変数を作成できないようにするプログラムを作成しようとしています。彼らがしようとすると、その変数はそのプログラムの関数環境に設定されます。私はこれを思いつきました、そしてそれはうまくいくようですが、何らかの理由で ComputerCraft rom/programs/edit の [edit: 9] でエラーを投げています。テストプログラムを実行すると、
a = 1
print(a)
それは正常に機能し、そのプログラムによるアクセスを許可しながらグローバル変数が作成されるのを防ぎますが、他のプログラムでは機能しません。_G.a や local a などをやってみましたが、どれもうまくいきます。他のプログラムで動作しない理由を知っている人はいますか?
local oldload = loadfile
function _G.loadfile(str)
local func = oldload(str)
local env = {}
env._G = env
setmetatable(env, {__index = _G, __newindex =
function(table, var, val)
rawset(env, var, val)
end})
setfenv(func, env)
return func
end