lua middleclass 的一个要注意的问题,静态属性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Blog2015/article/details/77010567

lua 中没有类,

lua middleclass 实现了类。

github地址: https://github.com/kikito/middleclass


今天写代码的时候遇见一个问题,纠结了一下午。 

最后发现  用middleclass,实例化多个对象时,好像后面的对象会覆盖前面对象的 其基类中的属性。

做了个测试如下:


类A,(类B的基类):


类B, (类A的子类):

扫描二维码关注公众号,回复: 2908643 查看本文章


测试代码:


测试结果:


结果有问题, b1.property.aaa 已经被篡改成和 b2的相同了。


结论: middleclass 的对象属性不能为表。否则在实例化时各子类对象,将会共用这个属性,先实例化的这部分属性会被后实例化的覆盖。


可以将类A(B的基类)这样改一下:


测试代码不变。

结果:


结果正确,各对象的属性不同。


今天想明白了,这个共用、覆盖的特性正好用来作为静态属性。

这样声明的变量: 

A.static.xxx = nil

实际会自动先创建一个 A.static = {}




猜你喜欢

转载自blog.csdn.net/Blog2015/article/details/77010567