lua使用table問題

2021-06-20 01:14:00 字數 674 閱讀 2835

今天在開發的時候,自己建立了乙個table。建立**如下:

self.skill_value_table = 

self.skill_table = {}

for i = 1, 8 do

self.skill_table[i] = self.skill_value_table

end

這樣每次去改變self.skill_table[i]的值,所有的值都會跟著改變。

如果是以下這種方式建立:

self.skill_table = {}

for i = 1, 8 do

local skill_value_table =

self.skill_table[i] = skill_value_table

end

這樣每項值就沒有了關聯。

出現差異是因為lua中table的賦值類似c++的引用。只要改變一項,其他的也會跟著改變。因此,使用local變數,相當於通過自定義函式來賦值。

當建立乙個table a以後,a的所有變數存在一塊記憶體裡。直接使用=號賦值,相當與對記憶體建立了另乙份引用b;此時a和b都可以操作記憶體,記憶體變數改變,大家引用的值也將會改變。 當a={},重新賦值後,只是將之前的引用斷了,指向新的記憶體;此時b還可以繼續操作。當沒有引用存在時,記憶體才會被釋放

lua的table長度問題

看以下 local tbltest1 print table.getn tbltest1 這段 輸出的結果是3,這個大家都知道,是吧。不管最後那個3後面有沒有加逗號,結果都是3。再看下面的 local tbltest2 print table.getn tbltest2 這段 輸出的結果是多少?這裡...

lua中table引用問題

loacl a loacl b a a nil 雖然lua table的賦值是引用,修改a或b會同時修改。但是如果對a nil,此時b 還是指向原來的 本質上就是a和b指向同一塊記憶體位址,a nil只是將指標賦空,b還持有對該記憶體的引用 在物件導向的語言中,我們經常將乙個物件的指標或引用存到另乙...

Lua繼承(使用table實現)

lua本身是不能像c 那樣直接實現繼承,我們可以用萬能的table表來實現。廢話不多說,直接上 父類 people.lua people people.name 人 people.age 18 預設18歲 function people speak str print self.name self....