繁体   English   中英

无法使用元表从 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

我想从基础 class 为每个 B 和 C 创建实例。 但似乎他们都指向同一个基础 class。 当我使用 B 更改值时,C 中的值也发生了更改。 我在这里错过了什么吗。 或者我对 class 的设置是错误的。 谢谢你们的帮助!

在您的 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

但我想知道我应该如何在这个 class 中放置属性。 就像我在这个 class self.value1 self.value2.. 我应该把这些属性放在哪里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM