可以在表内定义使用冒号语法糖的Lua函数吗?

3
有没有其他的语法形式可以替代?
Account = {}

function Account:new (o)
    o = o or {}
    setmetatable(o, self)
    self.__index = self
    return o
end

在哪里可以直接将new放入Account的表构造函数中,并且函数获得一个隐式的self变量?
还是必须使用self参数(或等效方式),并按照以下方式进行操作?
Account = {
    new = function (self, o)
        o = o or {}
        setmetatable(o, self)
        self.__index = self
        return o
    end
}

Lua甚至没有++,你应该感激能够以两种方式定义函数。 - undefined
哈哈,我很感激,但也很好奇。 - undefined
1
是的,在第二种情况下,你必须使用明确的 self - undefined
换句话说,我理解得没错,明确的自我没有其他选择吗? 我可以接受这个,我只是好奇而已。 - undefined
1个回答

3
在表构造函数中,函数定义没有可用的语法糖。这包括对于name = function (args) body endfunction name (args) body end,以及通过扩展的冒号语法。
你必须使用一个显式的第一个函数参数(它不需要被命名为self,但这是一个好的实践)。
正如你所注意到的,这将起作用,因为函数调用的冒号语法是一种单独的语法糖形式。
引用如下:

调用v:name(args)v.name(v,args)的语法糖,只是v只被评估一次。

Lua 5.4:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接