一般に、任意のテーブルを連結するという概念は Lua では意味がありません。1 つのキーは 1 つの値しか持てないからです。
連結が意味を持つ特殊なケースがあります。そのようなものの 1 つは、結果のリストを返すことを意図した関数の自然な結果である単純な配列を含むテーブルの場合です。
その場合、次のように記述できます。
-- return a new array containing the concatenation of all of its
-- parameters. Scaler parameters are included in place, and array
-- parameters have their values shallow-copied to the final array.
-- Note that userdata and function values are treated as scalar.
function array_concat(...)
local t = {}
for n = 1,select("#",...) do
local arg = select(n,...)
if type(arg)=="table" then
for _,v in ipairs(arg) do
t[#t+1] = v
end
else
t[#t+1] = arg
end
end
return t
end
userdata
これは浅いコピーであり、または関数の値が別の処理が必要なコンテナまたはオブジェクトであるかどうかを確認しようとはしません。
別の実装では、新しいテーブルを作成するのではなく、最初の引数を変更する場合があります。これにより、コピーのコストが節約され、文字列の演算子とはarray_concat
異なります。..
編集: Joseph Kingryのコメントに見られるように、から各引数の実際の値を適切に抽出できませんでした...
。また、関数からマージされたテーブルを返すこともまったくできませんでした。それは、回答ボックスでコーディングし、コードをまったくテストしないことで得られるものです。