luaのテーブルオブジェクトの参照受け渡しの問題

【序文】

さらに面倒なことはせずに、コードを見てください。


local tab1 = {
    
    1}
local tab2 = {
    
    3,4}

function func(tab)
  for k, v in pairs(tab) do
    print(k,v)
  end
end

function func1(tab)
  table.insert(tab,4)
end

tab2 = tab1

--操作tab2,打印tab1,引用传递tab2 = tab1,作用结果一致,tab2多个nil暂时没搞懂,欢迎讨论
tab2[2] = 2
print(func(tab1),func(tab2))-->tab1 = {
    
    1,2},tab2 = {
    
    1,2,nil}

table.insert(tab2,3)
print(func(tab1))-->tab1 = {
    
    1,2,3}

--传递tab1,打印tab1,引用传递作用的对象还是原来的tab1
func1(tab1)
print(func(tab1))-->tab1 = {
    
    1,2,3,4}

luaでのテーブルの値の転送は、上記のように、参照によるものです。tab2 = tab1、およびfunc1(tab)、テーブルへの直接参照操作も元のテーブルに同期されます。

[テーブル参照の問題の概要]

参照はオブジェクトのエイリアスであり、新しいメモリスペースを開くことはなく、メモリは同じです...

変数への参照を操作するために、効果は変数に直接反映されます。スクリプト言語のコレクションタイプは、参照渡しの問題に注意を払う必要があります。
元のテーブルを操作したくない場合は、テーブル参照を使用できません。元の参照されたメモリをコピーし、新しいメモリを開いてから、コピーしたメモリを操作して、元のテーブルが操作されないようにする必要があります。影響を受ける。
インターネットには多くのコピー方法があります。私は怠惰すぎて書くことができず、他の人が書いた良い投稿を投稿します:https://blog.csdn.net/Knight_Assassin/article/details/76260227-テーブルタイプパス参照の問題Luaプログラミングで遭遇

おすすめ

転載: blog.csdn.net/qq_42541751/article/details/123226563