Перейти к содержимому
  • 0
ZiJer

Проблема при вызове конструктора

Вопрос

Что я делаю не так?

DqbEM1H.png

 

Вот конструктор:

function GuiObject:CreateNew(x, y, w, h, listeners, container)
  local newObject = {}
  setmetatable(newObject, GuiObject)

  newObject.x = x
  newObject.y = y
  newObject.w = w
  newObject.h = h
  newObject.listeners = listeners
  newObject.container = container

  return newObject
end

Почему maingui.listeners == {} , а

maingui.container вообще nil

 

Все остальные поля (x,y,w,h) нормально инициализируются.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

Ты создаешь конструктор: используя двоеточие

function GuiObject:CreateNew(x, y, w, h, listeners, container)
                  ^
                  |

Это синтаксический сахар Луа, который следует понимать как неявная передача в функцию еще одного параметра. Например, испльзуемое тобой определение конструктора, равнозначно вот такому (без двоеточия):

function GuiObject.CreateNew(self, x, y, w, h, listeners, container)

При вызове конструктора через двоеточие, первым параметром (self) передается сам вызывающий объект. Однако ты вызываешь конструктор без двоеточия, поэтому туда где должен быть объект попадает значение х, равное 1 и так далее со сдвижкой на один параметр. Вот ты и получаешь вместо listeners значение container={}. А container вообще остается не определен.

Либо опиши конструктор без двоеточия, либо вызывай его через двоеточие.

Изменено пользователем Zer0Galaxy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...