2017-02-21 202 views
2

有沒有辦法傳遞一個元組作爲Lua函數的參數?如何將元組作爲參數傳遞給Lua函數?

例如,我有一個返回多個值

function f(a,b) return b,a end 

的功能,我想反覆使用這個功能f,因此我可以這樣寫:

f (f ... f(1,2)) 

但是,如果我需要什麼將這個初始元組(1,2)作爲變量存儲init

f (f ... f(init)) 

有支持嗎?

根據this answer,它似乎蟒蛇與摔跤運營商*它。

+1

「*所以我可以寫*」這不是有效的Lua。 'f ... f'不是合法的Lua語法。所以我不明白你想要什麼。 –

+1

[此頁](http://lua-users.org/wiki/FunctionalTuples)可能會對您有所幫助。 – Thelmund

+1

@NicolBolas您可以編寫例如f(f(1,2)),f(f(f(1,2)))等等,對於f的任何數量的應用。這就是我用'...'和'重複申請'的意思。 – tinlyx

回答

3

Lua沒有「元組」。

當函數返回多個值時,它將返回多個值。它們不是放在一起的一些數據結構;他們是不同的價值觀。如果要將多個返回值存儲在單個數據結構中,則必須實際執行此操作。

Lua 5.2具有table.pack函數,您可以使用該函數將多個返回值存儲在表中。但它這樣做的,這樣你以後可以分解它們的方式:

local values = table.pack(f(1, 2)) 

f(table.unpack(values, values.n)) 

unpack存在在Lua 5.1,但pack沒有。你可以很容易地模擬:

function pack(...) 
    return {n = select("#", ...), ...} 
end 
相關問題