所以我有一个 Lua 脚本,我在其中设置函数的环境并定义我在环境中可用的其他函数。问题是当我调用我所做的函数时setfenv
,它在环境中调用的任何函数都使用全局_G
环境来查找值,而不是我在调用初始函数时设置的环境。我已经复制了以下问题:
> function f() print(t) end
> t = 5
> f()
5
> env = {}
> env['print'] = print
> env['t'] = 7
> env['f'] = f
> setfenv(f, env)
> f()
7
> setfenv(f, _G)
> f()
5
> function g() f() end
> g()
5
> setfenv(g, env)
> g()
5
有没有办法让环境传播到所有调用,而不必setfenv
对我想要添加的每个函数都做env
(基本上,这样示例中的最后一个调用g()
将返回7
而不是返回5
)?
使用 Lua 5.1。