cocos2d-x中使用Lua遇到一个奇异Bug

同事写了一个clean方法,但是却发现data并没有清空

local UserLevel = class('UserLevel')
local instance_ = nil
function UserLevel:getInstance()
      if instance_ == nil then
          instance_ = UserLevel:create()
      end
      return instance
end
-- lazy的方式创建data
funcion UserLevel:getData()
    if self.data == nil then
        self.data = {level = 1}
    end
end
function UserLevel:clean()
  self.data = nil
  print(tostring(self.data)) --此处打印可能不为nil
end

Bug是clean方法没有起作用,print的输出不为nil,看起来不太可能啊,但是确实是有可能的。
调用getData()存在两种方式

--错误的方式,data属性将会写到class属性中
UserLevel:getData()
--正确的方式
UserLevel:getInstance():getData()

如果使用了错误的方式调用了一次,又使用了正确的方式调用一次,self.data将会在class和instance_中存在,那么self.data被赋值为nil仅仅修改了instance_的data,由于class是instance_的metadata,再次调用self.data会索引class的data。

推荐阅读更多精彩内容