调用函数{}和()之间有什么区别?
问题描述:
我最近看到一个新的方法,至少对我来说,在Lua中调用函数并且使用大括号{},当然如果参数是表格。把这个功能是什么我想检查一个例子:调用函数{}和()之间有什么区别?
function test(table)
for _, i in pairs(table) do
print(i);
end
end
test{"What", "is", "the", "difference?"};
在调用该函数测试(),我们使用大括号“{}”,而不是正常的括号“()”。
所以我的问题去了,这两者之间有什么区别?性能更好?我应该什么时候使用一个而不是另一个?为什么在正常的大括号做这个工作的时候就是这样创建的?
答
Lua为函数参数提供了两个语法糖。他们的目的仅仅是方便。
您可以选择任何您(和您的同事)喜欢的方便性,可读性和软件设计。性能方面没有区别。
如果您唯一的参数是单个文字字符串或单个新表(表构造函数!),您可以省略括号。
从Lua的参考手册:
参数有以下语法:
args ::= `(´ [explist] `)´
args ::= tableconstructor
args ::= String
所有参数表达式呼叫之前进行评估。形式的呼叫 是
f({fields})
的语法糖;即参数列表 是单个新表。形式f'string'
(或f"string"
或f[[string]])
的呼叫是f('string')
语法糖;也就是说, 参数列表是单一的文本字符串
除了你得到的答案,测试{}是。不等价于test()。Test有一个参数(表),传递多个参数会默默地忽略其余的参数,而{}创建一个表作为包含所有值的单个对象。 }与测试(1,2,3)不一样。 – tonypdmtr