这更多是一个设计哲学问题,因为我已经知道,如果通过以下方式定义函数而不使用:
关键字,则不应该使用self
(面向对象的语法糖)来调用函数使用.
。但是问题是,使用我创建的库的程序员倾向于不阅读文档,而遇到“我应该如何调用您的函数?”的问题,因此最终我总是使用以下方法定义函数:
local tbl = {};
function tbl:Add(a, b)
return a + b;
end
我已经安装了Luacheck(在VS Code中),当我使用这种语法而不使用self
引用关键字时,它经常会抱怨。它说:[luacheck] unused argument "self"
。在性能方面是否存在任何问题(或者是否可以在VS Code中禁用Luacheck)?
相对于以下样式,我更喜欢以这种样式编写函数:
function tbl.Add(_, a, b)
return a + b;
end
似乎很痛苦,必须在参数列表的开头添加一个虚拟变量。
编辑:另一个问题是,如果您有许多实现相同名称的函数的表,并希望对其进行迭代,但是某些实现不使用self
参数,而其他实现呢?检查正确调用该函数的表类型将是非常繁琐且糟糕的设计。
首选样式是什么?一般对此警告有些困惑。你怎么看?谢谢。
答案 0 :(得分:1)
如果您不使用self参数,则可以这样做
function tbl.Add(a, b)
return a + b;
end
无需使用虚拟变量。
您只需要确保随后也使用.
而不是:
来调用它
所以
local someValue = tbl.Add(1, 3)
例如不是
local someValue = tbl:Add(1, 3)