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

What is the difference between {} and () in calling a function?

我最近看到了一种新方法,至少对我来说是这样,用于调用 Lua 中的函数,那就是使用大括号 {},当然前提是参数是 table。以这个函数为例说明我要考察的内容:

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

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

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

那么我的问题来了,这两者之间有什么区别?哪个性能更好?我什么时候应该使用一个而不是另一个?为什么在普通牙套完成工作的同时创建这样的方式?

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

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

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

来自 Lua 参考手册:

2.5.8 – Function Calls

Arguments have the following syntax:

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

All argument expressions are evaluated before the call. A call of the form f{fields} is syntactic sugar for f({fields}); that is, the argument list is a single new table. A call of the form f'string' (or f"string" or f[[string]]) is syntactic sugar for f('string'); that is, the argument list is a single literal string.