使用 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下一个参数的另一个函数。
另一个函数并不总是原来的
可能是递归的
我正在学习如何在 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下一个参数的另一个函数。
另一个函数并不总是原来的
可能是递归的