gpt4 book ai didi

lua - 加载文件并返回其环境

转载 作者:行者123 更新时间:2023-12-03 14:44:22 25 4
gpt4 key购买 nike

我正在尝试执行以下操作:(下面的包含()代码)

文件1.lua

A = 5

文件2.lua
file1 = include(File1.lua)
A = 1

print(A) -- 1
print(file1.A) -- 5

我已经找到了我正在寻找的东西,但在 lua 5.1 中:
Loadfile without polluting global environment

但我无法让它在 5.2 中工作,
function include(scriptfile)
local env = setmetatable({}, {__index=_G})
assert(pcall(setfenv(assert(loadfile(scriptfile)), env)))
setmetatable(env, nil)
return env
end

使用 C++ 中的这个,以及一个注册版本的加载文件,所以我试图不修改函数调用。这可能吗?
无论我尝试 break 还是 env 都是空的。

最佳答案

文件2.lua

function include(scriptfile)
local env = setmetatable({}, {__index=_G})
assert(loadfile(scriptfile, 't', env))()
return setmetatable(env, nil)
end

file1 = include'File1.lua'
A = 1

print(A) -- 1
print(file1.A) -- 5

关于lua - 加载文件并返回其环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com