在 LUA 中,如何在 _G 中找到一个类型为“function”的变量,并向其中传递参数

我已经在_G中找到了一些表中的函数,并对那些不需要参数的函数使用了以下语法进行调用:

a = _G[t] [f] ()

但是一些函数需要参数,我尝试使用以下语法进行调用:

a = _G[t] [f] (x)

但是LUA的错误消息似乎表明被调用的函数并没有接收到“x”。

因此,我的问题是,如果函数被定义为

function t:f (arg)

当我拥有t和f的文本字符串时,我如何为其提供一个要处理的参数?

谢谢

点赞
用户7396148
用户7396148

一个定义如下的函数:

function t:f(arg)

有一个隐含的第一个参数 self,因此该定义实际上与以下定义相同:

function t.f(self, arg)

所以当你调用 a = _G["t"]["f"](x) 时,你将 x 作为 self 传递进去,而 arg 则设置为 nil。要正确调用此函数,您需要执行以下操作:

_G["t"]["f"](_G["t"], arg);

一些示例代码,以便您可以看到其运作方式:

t = {}

function t:f(arg)
    print(self, arg)
end

_G["t"]["f"]("test")         -- "test   nil"
_G["t"]["f"](_G["t"],"test") -- "table: 00e09750    test"
2021-05-05 19:50:38