{} 和 () 在函数调用中有什么区别?

我最近看到了一种新的方法,在Lua中调用函数,如果参数是一个表,那就使用花括号{}。以下是一个例子:

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

test{"什么", "是", "不同之处?"};

在调用函数** test() **时,我们使用了花括号“{}”,而不是常规括号“()”。

所以我的问题是,这两者之间有什么区别?哪个性能更好?在何时应该使用其中一个,而不是另一个?为什么要创建这样的方式,而常规括号可以很好地完成工作?

点赞
用户2858170
用户2858170

Lua 提供了两种语法糖来简化函数参数。它们的目的仅限于方便。

在方便性、可读性以及软件设计方面,您可以选择您(和您的同事)偏好的任何内容。在性能方面,它们没有区别。

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

来自 Lua 参考手册:

2.5.8 - 函数调用

参数有以下语法:

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

所有参数表达式在调用之前都会被评估。形如 f{fields} 的调用是 f({fields}) 的语法糖;也就是说,参数列表是单个新表。 形如 f'string' 的调用(或 f"string"f [[string]])是 f('string') 的语法糖;也就是说,参数列表是单个文本字符串。

2017-07-15 15:52:39