1

luaの奇妙な振る舞いに出くわしました。コード例:

function foo()
    local t = {'a', 'b', 'c'}
    return unpack(t)
end

function bar()
    local t = {'x', 'y'}
    return unpack(t)
end

b = { foo(), bar() }

for k,v in pairs(b) do
    print(k,v)
end

このコードの結果は次のとおりです。

1   a
2   x
3   y

したがって、からの結果foo()は、最初の要素を除いてすべて破棄されます。問題は、なぜいくつかの要素が破棄されるのかということです。lua 5.2のマニュアルを簡単に確認しましたが、この動作の説明が表示されません。

4

1 に答える 1

9

問題は、なぜいくつかの要素が破棄されるのかということです。

それがLuaの仕組みだからです。物事のリスト(テーブルコンストラクターや関数呼び出し引数リストなど)のコンテキストで使用される場合、複数の値(関数呼び出しと)をもたらす式は、それが最後である場合にのみ、そのリストにすべての値を追加しますリストの要素。...

それで:

{foo, ...}

すべてのvarargsを最後に配置します。

{..., foo}

最初のvarargのみをテーブルに配置します。

このように複数の関数呼び出しをバンドルする場合は、table.insert各要素を個別にリストに含める関数を使用する必要があります。

于 2013-01-06T20:34:31.853 に答える