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

calling a function with a table constructor?

我正在学习如何在 YouTube 视频上创建和使用 class,我偶然发现了这段代码

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} 这是我第一次看到用 () 以外的任何东西调用函数。我对它的作用有 2 个猜测,也许它用 {goal = 100} 替换了 cc:new 函数的参数,或者可能调用了函数并将 t table 分配给变量然后分配table 和 {goal = 100}?如果我错了请纠正我

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

秒,cc:new{goal = 100}等于cc:new({goal = 100})

这是一个语法糖,如果只有一个参数且其类型为字符串或[,您可以调用不带括号的函数=30=]table 文字

示例:

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

foo "Hello" "World"

这将输出“Hello”和“World”

如果你想调用一个不带括号的函数并使用多个参数,你要调用的函数必须return下一个参数的另一个函数。

另一个函数并不总是原来的

可能是递归的