将Lua方法定义为初始化

vik*_*rry 3 methods lua initializer

在Lua语言中,我能够在表格中定义诸如的函数

table = { myfunction = function(x) return x end }
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以用这种方式创建方法,而不是像我这样做

function table:mymethod() ... end
Run Code Online (Sandbox Code Playgroud)

我很确定可以用这种方式添加方法,但我不确定这种技术的正确名称,我找不到它寻找"lua"和"方法"等.

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

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

那么......这里有人碰巧知道吗?

jpj*_*obs 5

当然:table:method()只是语法糖table.method(self),但你必须照顾这个self论点.如果你这样做

tab={f=function(x)return x end }
Run Code Online (Sandbox Code Playgroud)

然后tab:f(x)将无法工作,因为这实际上是tab.f(tab,x),因此将返回tab而不是x.

您可以在面向对象PiL第16章查看lua用户wiki.

  • 只是评论 - 在制作"方法"时,第一个参数通常被命名为"self".这是函数选项卡:method()语法糖.如果你想通过':'调用它,那么创建你的函数:tab = {f = function(self,x)return x end}并调用tab:f(x). (2认同)