今天在开发的时候,自己建立了一个table。建立代码如下:
self.skill_value_table = { skill_id = 0,
show_type = 3,
}
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 = {skill_id = 0, show_type = 3,}
self.skill_table[i] = skill_value_table
end
这样每项值就没有了关联。
出现差异是因为lua中table的赋值类似c++的引用。只要改变一项,其他的也会跟着改变。因此,使用local变量,相当于通过自定义函数来赋值。
当创建一个table A以后,A的所有变量存在一块内存里。直接使用=号赋值,相当与对内存建立了另一份引用B;此时A和B都可以操作内存,内存变量改变,大家引用的值也将会改变。 当A={},重新赋值后,只是将之前的引用断了,指向新的内存;此时B还可以继续操作。当没有引用存在时,内存才会被释放