Lua loadfile()并按名称调用文件中定义的函数
在Lua中,如何使用loadfile()加载函数,如Lua loadfile()并按名称调用文件中定义的函数,lua,Lua,在Lua中,如何使用loadfile()加载函数,如 function test() print('test') end 然后按名称执行它?例如,如果Iloadfile()则执行文件的内容。然后如何调用test() 编辑:函数“test”可以是文件中定义的任意函数 Edit2:在沙盒环境中?您正在尝试创建一个名为test的函数?那么这就是为什么: function test() print('test') end 并称之为: test() 如果您想从另一
function test() print('test') end
然后按名称执行它?例如,如果Iloadfile()
则执行文件的内容。然后如何调用test()
编辑:函数“test”可以是文件中定义的任意函数
Edit2:在沙盒环境中?您正在尝试创建一个名为test的函数?那么这就是为什么:
function test()
print('test')
end
并称之为:
test()
如果您想从另一个文件加载该代码,假设上面的代码位于名为“scripts.scriptTest”的文件中,那么将其调用到主文件将类似于:
local scriptTest = require("scripts.scriptTest")
scriptTest.test()
Egors的评论让我想到了这个解决方案
loadstring/loadfile
返回可执行的“块”。定义的任何函数都会添加到全局环境中。函数setfenv(函数,环境)
将函数中定义的函数添加到提供的环境中。然后可以按名称调用该函数。令人困惑是的,请参见此示例:
Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio
> string_a = "function a(msg) print(msg) end"
> func_a = loadstring(string_a)
> env = { print = print }
> setfenv(func_a, env)
> pcall(func_a)
> for k,v in pairs(env) do print(k,v) end
print function: 0x19a5a40
a function: 0x19c9ed0
> env['a']('test')
test
assert(加载文件(“test_func.lua”)();test()
应该可以工作,因为test()在执行文件内容后成为全局函数。