无法使用元表从 lua 中的基础 class 创建实例
Unable to create instance from base class in lua using metatable
我目前正在开发 Defold 项目,需要在 lua 中构建一个 class。
这是我的基地class
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 从基 class 创建实例。但似乎它们都指向同一个基 class。当我使用 B 更改值时,C 中的值也发生了变化。
我在这里错过了什么吗?或者我对 class 的设置是错误的。
谢谢大家的帮助!
在您的 mclass 文件中,class
总是引用同一个 table。那就是你在 printOut
和 setValue
中 modify/access 的 table。
通过使用冒号表示法,这两个函数都有一个隐式 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
但我想知道我应该如何在这个 class 中放置属性。
就像我在这个 class 中有很多属性
自我价值1
自我价值2
..
我应该把这些属性放在哪里
我目前正在开发 Defold 项目,需要在 lua 中构建一个 class。 这是我的基地class
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 从基 class 创建实例。但似乎它们都指向同一个基 class。当我使用 B 更改值时,C 中的值也发生了变化。 我在这里错过了什么吗?或者我对 class 的设置是错误的。 谢谢大家的帮助!
在您的 mclass 文件中,class
总是引用同一个 table。那就是你在 printOut
和 setValue
中 modify/access 的 table。
通过使用冒号表示法,这两个函数都有一个隐式 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
但我想知道我应该如何在这个 class 中放置属性。 就像我在这个 class 中有很多属性 自我价值1 自我价值2 .. 我应该把这些属性放在哪里