调用函数时{}和()之间有什么区别?

时间:2017-07-15 14:26:34

标签: lua lua-table

我最近看到一种新方法,至少在我看来,用于调用Lua中的函数,即使用花括号{},当然如果参数是一个表。以此函数为例,我想检查一下:

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

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

在调用函数 test()时,我们使用花括号“{}”而不是普通的大括号“()”。

所以我的问题是,这两者有什么区别?哪个性能更好?我什么时候应该使用一个而不是另一个?为什么在正常的大括号完成这项工作时会产生这样的方式?

1 个答案:

答案 0 :(得分:4)

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

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

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

来自Lua参考手册:

2.5.8 – Function Calls

  

参数具有以下语法:

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

在调用之前评估所有参数表达式。一个电话   形式f{fields}f({fields})的句法糖;那就是   参数列表是单个新表。拨打f'string'表格(或   f"string"f[[string]])f('string')的语法糖;那是,   参数列表是单个文字字符串