2017-07-15 47 views
0

我最近看到一个新的方法,至少对我来说,在Lua中调用函数并且使用大括号{},当然如果参数是表格。把这个功能是什么我想检查一个例子:调用函数{}和()之间有什么区别?

function test(table) 
    for _, i in pairs(table) do 
     print(i); 
    end 
end 

test{"What", "is", "the", "difference?"}; 

在调用该函数测试(),我们使用大括号“{}”,而不是正常的括号“()”。

所以我的问题去了,这两者之间有什么区别?性能更好?我应该什么时候使用一个而不是另一个?为什么在正常的大括号做这个工作的时候就是这样创建的?

+1

除了你得到的答案,测试{}是。不等价于test()。Test有一个参数(表),传递多个参数会默默地忽略其余的参数,而{}创建一个表作为包含所有值的单个对象。 }与测试(1,2,3)不一样。 – tonypdmtr

回答

3

Lua为函数参数提供了两个语法糖。他们的目的仅仅是方便。

您可以选择任何您(和您的同事)喜欢的方便性,可读性和软件设计。性能方面没有区别。

如果您唯一的参数是单个文字字符串或单个新表(表构造函数!),您可以省略括号。

从Lua的参考手册:

2.5.8 – Function Calls

参数有以下语法:

args ::= `(´ [explist] `)´ 
args ::= tableconstructor 
args ::= String 

所有参数表达式呼叫之前进行评估。形式的呼叫 是f({fields})的语法糖;即参数列表 是单个新表。形式f'string'(或 f"string"f[[string]])的呼叫是f('string')语法糖;也就是说, 参数列表是单一的文本字符串

相关问题