首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用元表从lua中的基类创建实例

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

Stack Overflow用户
提问于 2020-04-05 02:36:55
回答 2查看 35关注 0票数 1

我目前在Defold项目中工作,需要在lua中构建一个类。这是我的基类

代码语言:javascript
复制
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

这是我在主脚本中的用法

代码语言:javascript
复制
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中的值也被改变了。我是不是错过了什么。或者我的课程设置是错误的。感谢大家的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-05 03:00:35

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

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

票数 0
EN

Stack Overflow用户

发布于 2020-04-05 03:25:21

我更改了我的mClass,它工作得很好。

代码语言:javascript
复制
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.value1 self.value2中有很多属性一样..我应该把这些属性放在哪里?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61032995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档