Lua をゲームに埋め込もうとしています。私がやりたいことは、フォルダー内のすべてのファイルをロードし、C++ 側に保存されるそれらのファイルに基づいてオブジェクトを作成するロード関数を作成することです。ただし、dofile のようなものを使用すると、そのファイルにある変数ですべてが汚染されます。このインポートをローカルに変更するにはどうすればよいですか?
質問する
317 次
1 に答える
2
を使用loadfile
して、ファイルの内容に基づいて関数を取得しsetfenv(fn,{})
、環境を設定してから、その関数を呼び出すことができます (おそらく にラップされますpcall
)。
local fn, err = loadfile("myfile")
if fn then
setfenv(fn,{})
local ok, err = pcall(fn)
if not ok then error(err) end
else
error(err)
end
渡すテーブルにsetfenv
、スクリプトがグローバル環境にアクセスしたり、グローバル環境へのアクセスを提供したりするために必要な値を次のように設定することもできます。
local env = {}
setmetatable(env,{__index = _G})
setfenv(fn,env)
これはすべて Lua 5.1 用です。
于 2013-02-18T00:04:56.307 に答える