SSブログ

Lua の配列の複製 [Lua]

Lua のテーブルは mutable なデータ型なので、例えば関数にテーブルを渡して関数の中でテーブルの書き換え操作とかを行うと、呼び出し側からみてもテーブルの内容が変わってしまったりします。

これが困る場合もあるのでどうにかならないかということを前からぼんやり思っていて、一つにはテーブルをコンスセルとみなすリスト構造とその操作用関数を定義してやればいいというのがありますが、これはちょっと面倒くさい。

もう一つは呼び出し側か関数側かどちらかでテーブルの複製を行えばよい。しかしこれは標準ライブラリにありません。こういうコードを書く必要がでてきます。

local new = {}
for k,v in ipairs(old) do
  new[k] = v
end

勿論これを関数にしておけばいいのですが、もっと手元にあるものだけで「手軽」にやる方法はないかと思っていました。

ところが今ふと思いついたのですが、こうすればよいだけです。わりとあっけない話でした。

{unpack(old)}

確かめてみます。

> old = {1,2,3}
> new1 = old
> new2 = {unpack(old)}
> new1[1] = 4
> new2[1] = 5
> print(table.concat(old, ","))
4,2,3
> print(table.concat(new1, ","))
4,2,3
> print(table.concat(new2, ","))
5,2,3

制限として浅いコピーであること、配列としてのテーブルのみに使えることがありますが、贅沢を言わない場面では重宝しそうです。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。