lua使用table问题

来源:互联网 发布:结对编程 英文 编辑:程序博客网 时间:2024/05/16 17:25
今天在开发的时候,自己建立了一个table。建立代码如下:
self.skill_value_table = {  skill_id = 0,      show_type = 3,    }self.skill_table = {}for i = 1, 8 doself.skill_table[i] = self.skill_value_table end 

这样每次去改变self.skill_table[i]的值,所有的值都会跟着改变。

如果是以下这种方式创建:

self.skill_table = {}for i = 1, 8 dolocal skill_value_table = {skill_id = 0, show_type = 3,}self.skill_table[i] = skill_value_tableend 
这样每项值就没有了关联。

出现差异是因为lua中table的赋值类似c++的引用。只要改变一项,其他的也会跟着改变。因此,使用local变量,相当于通过自定义函数来赋值。

当创建一个table A以后,A的所有变量存在一块内存里。直接使用=号赋值,相当与对内存建立了另一份引用B;此时A和B都可以操作内存,内存变量改变,大家引用的值也将会改变。 当A={},重新赋值后,只是将之前的引用断了,指向新的内存;此时B还可以继续操作。当没有引用存在时,内存才会被释放

0 0