1

我有一个函数引用表,如下所示:

KLC.ChatCommandBank = {
test = KLC.TestFunction,
config = KLC.OpenInterfaceOptions,
option = KLC.OpenInterfaceOptions,
options = KLC.OpenInterfaceOptions,
help = KLC.PrintHelp
};

但是当f = "test"t是一个字符串表,我打电话

KLC.ChatCommandBank[f](t);

然后函数

function KLC:TestFunction(tab)
    print(tab);
end

具有 的niltab,尽管调用函数时t不是nil

我怀疑这是由于函数引用表没有定义参数;我无法用谷歌找到任何东西,我自己的修补也无法解决它!任何输入表示赞赏

4

1 回答 1

2

这是因为当您定义函数时,KLC:TestFunction(tab)它会获得一个隐式参数,该参数self引用它所调用的表。

当您将其称为KLC.ChatCommandBank[f](t)时,您需要显式传递一些东西来代替该参数:

KLC.ChatCommandBank[f](KLC, t)

或者,您可以将定义更改为local function KLC.TestFunction(tab).

于 2013-06-18T03:19:04.620 回答