2017-02-21 9 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によると、pythonにはスプラット演算子*があるようです。

+1

"*できるように*"これは有効なLuaではありません。 'f ... f'は法的なLua構文ではありません。だから私はあなたがここで欲しいものを理解していない。 –

+1

[このページ](http://lua-users.org/wiki/FunctionalTuples)がお手伝いします。 – Thelmund

+1

@NicolBolas (f(1,2))、f(f(1,2)))などのように、「f」の任意の数のアプリケーションに対して使用することができる。それは私が '...'で意味していたことであり、 '繰り返し適用する'である。 – tinlyx

答えて

3

ルアには "タプル"はありません。

関数が複数の値を返すときは、の複数の値を返します。彼らはいくつかのデータ構造にまとめられていません。彼らは別々の値です。複数の戻り値を単一のデータ構造体に格納する場合は、実際にそれを行う必要があります。

ルア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 
関連する問題