Методы класса Lua - PullRequest
       2

Методы класса Lua

2 голосов
/ 23 сентября 2019

Я пытаюсь создать класс Ball и у меня есть несколько методов в классе, но я не могу найти правильный синтаксис

Пробовал читать это: https://www.lua.org/pil/16.html

MovingObj = {}

function MovingObj:new(o)
  return o
end

ball = MovingObj:new {}

MovingObj.test = function (self)
  print ("Test!")
end

ball:test()

Ошибкаполученное сообщение: попытка вызвать метод 'test' (нулевое значение)

1 Ответ

1 голос
/ 23 сентября 2019

o - это просто пустая таблица, к ней нельзя применять метатаблицу, которая позволила бы получить доступ к функциям MovingObj

. Вы можете исправить это, применив метатаблицу во время вашей функции new.:

MovingObj = {}

function MovingObj.new(o) 
  o = o or {}

  local meta = {
    __index = MovingObj -- when o does not have a given index check MovingObj for that index.
  }

  return setmetatable(o, meta) -- return o with the new metatable applied.
end

ball = MovingObj.new({type = "ball"})

function MovingObj:test()
  print ("Test! I'm a " .. self.type)
end

ball:test()

Для этой функции new также нет необходимости использовать синтаксис :, мы не используем переменную self.

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