【问题标题】:What is the difference between {} and () in calling a function?{} 和 () 调用函数有什么区别?
【发布时间】:2017-07-16 00:55:48
【问题描述】:

我最近看到了一种新方法,至少对我来说,它可以在 Lua 中调用函数,那就是使用花括号 {},如果参数是表的话。以这个函数为例来说明我要检查的内容:

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

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

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

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

【问题讨论】:

  • 除了你得到的答案之外,test{} 不等同于 test()。 Test 有一个参数(表),传递多个参数将忽略其余参数,而 {} 创建一个表作为包含所有值的单个对象。因此,test {1,2,3} 与 test(1,2,3) 不同。

标签: lua lua-table


【解决方案1】:

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') 的语法糖;那是, 参数列表是一个单个文字字符串

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 2014-02-23
    • 2022-12-11
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    相关资源
    最近更新 更多