2015-06-29 52 views
2

這不是問題。只是Lua很棒。Lua中有趣的行爲'...'

t = {1, 2, 3} 
print(table.unpack(t))  -->1 2 3 
print(0, table.unpack(t)) -->0 1 2 3 
print(table.unpack(t), 4) -->1 4 

什麼?

回答

2

的問題歸結爲變量分配值,讓我簡化了問題:

function ret_1_2_3() 
    return 1, 2, 3 
end 

f, g, h, i = 0, ret_1_2_3() 
print(f,g,h,i)     --> 0 1 2 3 
f, g, h, i = ret_1_2_3(), 4 
print(f,g,h,i)     --> 1 4 nil nil 

你不必給變量使用時的名稱「...」,但它遵循同樣的規則和table.unpack返回多個值。在根據點3.4 Lua 5.2 Reference Manual它說:

如果一個表達式被用作最後一個(或唯一的)表達式列表的元素,則沒有調整的情況下(除非表達被括號括起來)。在所有其他情況下,Lua會將結果列表調整爲一個元素,要麼丟棄除第一個元素之外的所有值,要麼在沒有值的情況下添加單個零。

我確實花了一段時間才弄清楚,這是你問的一個很好的問題。