2017-07-15 159 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')語法糖;也就是說, 參數列表是單一的文本字符串

相關問題