4

テーブルにさらに使用法を追加する Array クラスを作成しています。2 つのテーブルを結合できるメタメソッドがあります。例:

Array(5) .. Array(6, 10) は {5, 6, 10} を与えるはずです

これを行うために 2 つのループを使用できることは承知していますが、コードをできるだけクリーンで効率的なものにしようとしています。アンパックで問題が発生しました。2 つのテーブルを連結しようとしていますが、すべての値が含まれていません。ここに私のコードと出力があります:

local Array = {}
Array.__index = Array

function Array.__concat(self, other)
    return Array.new(unpack(self), unpack(other))
end

function Array:concat(pattern)
    return table.concat(self, pattern)
end

function Array.new(...)
    return setmetatable({...}, Array)
end

setmetatable(Array, {__call = function(_, ...) return Array.new(...) end})

local x = Array(5, 12, 13) .. Array(6, 9) --concatenate two arrays
print(x:concat(", "))

OUTPUT: 5, 6, 9 (I want it to be "5, 12, 13, 6, 9")

4

1 に答える 1

7

これは標準的な Lua の動作です。コンマで区切られた関数呼び出しの列挙では、最後のものだけが複数の結果を返すことができます。例えば:

> function f() return 1, 2, 3 end
> print(f(), f())
1    1    2    3

私があなたなら、単純なことをしてforループを使用します。

于 2014-11-10T08:08:48.237 に答える