Lua-如果不使用“ self”关键字,则在表中定义函数时应该使用“:”吗?

时间:2018-12-07 12:11:36

标签: function lua luacheck

这更多是一个设计哲学问题,因为我已经知道,如果通过以下方式定义函数而不使用:关键字,则不应该使用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参数,而其他实现呢?检查正确调用该函数的表类型将是非常繁琐且糟糕的设计。

首选样式是什么?一般对此警告有些困惑。你怎么看?谢谢。

1 个答案:

答案 0 :(得分:1)

如果您不使用self参数,则可以这样做

function tbl.Add(a, b)
    return a + b;
end

无需使用虚拟变量。

您只需要确保随后也使用.而不是:来调用它
所以

local someValue = tbl.Add(1, 3)

例如不是

local someValue = tbl:Add(1, 3)