Что такое самоизменяющееся значение?

Я пытаюсь нарисовать некоторые вещи, используя wxlua.

ExampleClass = {}

function ExampleClass:New(someWxPanel)
  local obj = {}
  setmetatable(obj, self)
  self.__index = self
  self.m_panel = someWxPanel
  return obj
end

function ExampleClass:OnPaint()
  local dc = wx.wxPaintDC(self.m_panel)
   --paint some stuff
end


local example = ExampleClass(somePanel)
somePanel:Connect(wx.wxEVT_PAINT, example.OnPaint)

Я получаю следующее сообщение об ошибке: wxLua: невозможно вызвать неизвестный метод "m_panels" для типа "wxPaintEvent".

В то время как в любой другой функции, которую я определяю как Пример:SomeFunction() self указывает на мой экземпляр Example, и я могу получить полный доступ к его членам, здесь self это wxPaintEvent?

Как это случилось? Connect как-то меняет себя? Как я могу получить доступ к своим членам сейчас?

Цени любую помощь!

1 ответ

Решение

Когда вы регистрируетесь example.OnPaint как обработчик события в somePanel:Connect(wx.wxEVT_PAINT, example.OnPaint), он всегда получает событие в качестве первого параметра, но ваш метод ожидает объект (self) передается в качестве первого параметра, поэтому вы получите ошибку. Вам нужно заменить регистрацию на что-то вроде этого:

somePanel:Connect(wx.wxEVT_PAINT, function(event) example:OnPaint(event) end)
Другие вопросы по тегам