2

Lua をゲームに埋め込もうとしています。私がやりたいことは、フォルダー内のすべてのファイルをロードし、C++ 側に保存されるそれらのファイルに基づいてオブジェクトを作成するロード関数を作成することです。ただし、dofile のようなものを使用すると、そのファイルにある変数ですべてが汚染されます。このインポートをローカルに変更するにはどうすればよいですか?

4

1 に答える 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 に答える