Lua的函式引數為table時奇特現象
阿新 • • 發佈:2019-02-06
前言
今天在工作中使用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
變數。 - 這僅僅是我個人的理解,如果我理解的有問題或者大家有更加真確的解釋,歡迎給我留言指出,我會盡快改正的。