正如所料,这段代码:
s = "bar"
bar = function() print(s) end
_G[s]()
输出:
巴
但要么:
s = "bar"
foo = {
bar = function() print(s) end,
_G["foo." .. s]()
}
或者这个:
s = "bar"
foo = {
bar = function() print(s) end
}
_G["foo." .. s]()
输出:
尝试调用字段'?' (零值)
堆栈追溯:
test.lua:4:在主块中 [C]: ?
如何从字符串变量调用非全局函数?
答案 0 :(得分:4)
s = "bar"
foo = {
bar = function() print(s) end
}
_G["foo." .. s]()
最后一种方法不起作用,因为没有这样的表"foo.bar"
,而是表"bar"
中的字段foo
。所以你可以这样称呼它:
_G.foo[s]()
或简单地说:
foo[s]()