2017-08-22 4 views
1

私はLua 4を使った古いビデオゲーム用のMODを作成しています。入力されたテーブルの浅いコピーを作成する方法が必要です。Luaの浅いテーブルコピー4

http://lua-users.org/wiki/CopyTable

function shallowcopy(orig) 
    local orig_type = type(orig) 
    local copy 
    if orig_type == 'table' then 
     copy = {} 
     for orig_key, orig_value in pairs(orig) do 
      copy[orig_key] = orig_value 
     end 
    else -- number, string, boolean, etc 
     copy = orig 
    end 
    return copy 
end 

しかし、ルーチンのLUAの新しいバージョンのために書かれました:私は、ウェブ上でこのルーチンを見つけました。例えば、pairs関数はLua4には存在しません。また、関数は再帰的ではありません。どのように私はルア4で動作し、再帰的な同等のルーチンを書くだろうか?ありがとう!

[編集]

投稿が更新されました。

+2

なぜ浅いコピーを作成するのに役立つのですか?深いコピーを作成するポストコードはどうしてですか? – Piglet

+0

私はそれに気付かなかった。良いキャッチ。私は質問を更新しました。 – posfan12

答えて

2

ルア4にはテーブル用のforループがあります。

テーブル用のテーブルは、指定されたテーブルのすべてのペア(インデックス、値)をトラバースします。構文は次のとおりです。

stat ::= for name `,' name in exp1 do block end 

は浅いコピールーチンは再帰的である必要はありませんLuaの4リファレンスマニュアルのセクション4.4.4

https://www.lua.org/manual/4.0/manual.html#4.4

を参照してください。これは、参照によってコピーされるテーブル値にのみ影響し、そのため、すべてのメンバーがオンボードになります。