Невозможно создать экземпляр из базового класса в lua, используя metatable - PullRequest
1 голос
/ 04 апреля 2020

Я сейчас работаю над проектом 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 также изменилось. Я что-то здесь упустил? Или мои настройки для класса неверны. Спасибо за помощь, ребята!

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Я изменил свой 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.value1 self.value2 .. Где я должен поместить эти свойства

0 голосов
/ 04 апреля 2020

В вашем файле mclass class всегда ссылается на одну и ту же таблицу. Это таблица, которую вы изменяете / используете в printOut и setValue.

. Используя двоеточие, обе эти функции имеют неявный параметр self. Используйте это вместо class (например, print(self.value) и self.value = value).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...