无法使用元表从lua中的基类创建实例



我目前正在进行Defold项目,需要在lua中构建一个类。这是我的基本类

local class = {}
class.__index = class
class.value = nil
function class.create()
local o ={}
setmetatable(o, class)
return o
end
function class:printOut()
print(class.value)
end
function class:setValue(value)
class.value = value
end
return class

这是我在主脚本中的用法

local mclass = require "main.mclass"
local B
local C
function init(self)
msg.post(".", "acquire_input_focus")
msg.post("@render:", "use_fixed_fit_projection", { near = -1, far = 1 })
B = mclass.create()
C = mclass.create()
end
function on_input(self, action_id, action)
if action_id == hash("touch") and action.pressed then
B:setValue(10)
print(B.value)
B:setValue(12)
print(C.value)
--print(B.value)
end
end

我想为每个B和C从基类创建实例。但它们似乎都指向同一个基类。当我用B改变值时,C中的值也发生了变化。我是不是错过了什么。或者我的课程设置是错误的。谢谢你们的帮助!

在mclass文件中,class总是引用同一个表。这是您在printOutsetValue中修改/访问的表。

通过使用冒号表示法,这两个函数都有一个隐含的self参数。使用它而不是class(例如print(self.value)self.value = value(。

我更改了mClass,它运行良好。

local class = {}
class.__index = class
function class.create()
local o ={}
setmetatable(o, class)
return o
end
function class:printOut()
print(self.value)
end
function class:setValue(value)
self.value = value
end
return class

但我想知道该如何将属性放在这个类中。就像我在这个类中有很多属性self.value 1self.value 2。。我应该把这些属性放在哪里

最新更新