将Lua方法定义为初始化

时间:2011-01-21 09:14:47

标签: methods lua initializer

在Lua语言中,我能够使用诸如

之类的东西在表中定义函数
table = { myfunction = function(x) return x end }

我想知道我是否可以通过这种方式创建方法,而不必像

那样创建方法
function table:mymethod() ... end

我相当有可能以这种方式添加方法,但我不确定这种技术的正确名称,我找不到它寻找“lua”和“方法”等。

我的目的是将表传递给myfunction({data= stuff, name = returnedName, ?method?init() = stuff})等函数。

不幸的是,我尝试了几种冒号方法声明的组合,但它们都不是有效的语法。

所以...这里有人碰巧知道吗?

1 个答案:

答案 0 :(得分:5)

当然:table:method()只是table.method(self)的语法糖,但您必须处理self参数。如果你这样做

tab={f=function(x)return x end }

然后tab:f(x)将无效,因为它实际上是tab.f(tab,x),因此将返回tab而不是x

您可以查看lua users wiki on object orientationPiL chapter 16