使用表构造函数调用函数?

我在 YouTube 视频上学习创建和使用类时遇到了这段代码

cc = {calo = 0, goal = 1500}
function cc:new(t)
t = t or {}
setmetatable(t,self)
self.__index = self
return t
end
a = cc:new{goal = 100}

我不明白这部分 a = cc:new{goal = 100} 这是我第一次看到函数被调用而不是 (),我猜测它有两种可能,一种是用 {goal = 100} 替换了 cc:new 函数的参数,另一种可能是函数被调用并且 t 表被赋值给变量,然后将表赋值为 {goal = 100}?如果我理解有误,请纠正我

点赞
用户16388755
用户16388755

首先,{goal = 100} 只是一个参数。

其次,cc:new{goal = 100} 等同于 cc:new({goal = 100})

这是一种语法糖,如果只有一个参数且类型为字符串table字面值,就可以不加括号调用函数。

例如:

function foo(x)
    print(x)
    return foo
end

foo "Hello" "World"

这将输出 "Hello" 和 "World"。

如果你想要不加括号并且使用多个参数调用函数,你所调用的函数必须返回另一个函数来作为下一个参数。

另一个函数不一定是原始函数

它可能是递归的。

2021-07-06 09:43:20