Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Methods 将Lua方法定义为初始化_Methods_Lua_Initializer - Fatal编程技术网

Methods 将Lua方法定义为初始化

Methods 将Lua方法定义为初始化,methods,lua,initializer,Methods,Lua,Initializer,在Lua语言中,我能够在表中定义函数,例如 table = { myfunction = function(x) return x end } 我想知道我是否可以用这种方式创建方法,而不是像这样做 function table:mymethod() ... end 我相当肯定可以通过这种方式添加方法,但我不确定这种技术的正确名称,我也找不到它在寻找“lua”和“methods”之类的东西 我的意图是将一个表传递给一个函数,比如myfunction({data=stuff,name=retur

在Lua语言中,我能够在表中定义函数,例如

table = { myfunction = function(x) return x end }
我想知道我是否可以用这种方式创建方法,而不是像这样做

function table:mymethod() ... end
我相当肯定可以通过这种方式添加方法,但我不确定这种技术的正确名称,我也找不到它在寻找“lua”和“methods”之类的东西

我的意图是将一个表传递给一个函数,比如
myfunction({data=stuff,name=returnedName,?method?init()=stuff})

不幸的是,我尝试了几种冒号方法声明的组合,但没有一种是有效的语法

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

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

tab={f=function(x)return x end }
然后
tab:f(x)
将不起作用,因为这实际上是
tab.f(tab,x)
,因此将返回
tab
,而不是
x


你可以看看手术室。

哦,它很管用。。。有一次,我在寻找一个复杂的解决方案,其实很简单。啊哼。谢谢!只是一个注释-在创建“方法”时,第一个参数通常命名为“self”。函数选项卡:method()语法糖就是这样做的。如果要通过“:”调用它,请创建如下函数:tab={f=function(self,x)return x end}并作为tab:f(x)调用。