1. 程式人生 > >Lua的函式引數為table時奇特現象

Lua的函式引數為table時奇特現象

前言

今天在工作中使用lua編寫程式碼時發生了一個有趣的現象,特此記錄一下。

問題再現

當lua的函式為table時會發生什麼情況,話不多說直接上程式碼:

local tb = {1, 2, 3}

function testObject(tab, index)
    tab[10] = 110
    tab = {4,5,6} 
    tab = tab[index]
    return tab
end

print("tb[2] =", testObject(tb, 2))

for k,v in pairs(tb) do
    print(k,v)
end

大家來猜一猜輸出結果是什麼?反正我是理解錯了,我把結果粘出來咱們一起看一下吧

tb[2] = 5
1 1
2 2
3 3
10 110

不知道大家看到這個結果有沒有不理解的,反正我一開始是沒有明白,但是做了幾次試驗以後漸漸理解了這種行為…

總結

  • 我們都知道lua函式的引數為table時是引用傳遞,也就是在函式中對引數table的修改會反應到函式的“外部”。
  • 如果我是修改引數table的部分欄位的時候也確實這樣,比如tab[10] = 110
  • 但是我如果直接給這個table賦值,它就會變成一個區域性變數,切斷了和“外部”的聯絡,比如例子中的tab變數。
  • 這僅僅是我個人的理解,如果我理解的有問題或者大家有更加真確的解釋,歡迎給我留言指出,我會盡快改正的。