lua используя функции-члены в параметрах конструктора - PullRequest
1 голос
/ 17 августа 2011

Я, вероятно, не использую правильные слова в названии, так как я новичок в lua, и это не совсем ОО, как я привык. Поэтому я буду использовать код, чтобы объяснить себя и то, что я пытаюсь.

У меня есть класс, который я определяю (упрощенно):

function newButton(params)
  local button, text
  function button:setText(newtext) ... end
  return button
end

Я пытаюсь создать кнопку, которая изменит текст после нажатия. Поэтому я создаю его следующим образом (упрощенно):

local sound = false
local soundButton = Button.newButton{
  text = "Sound off",
  onEvent = function(event)
    if sound then
      sound = false; setText("Sound on")
    else
      sound = true; setText("Sound off")
    end
  end
}

Все хорошо, работает, за исключением того, что говорит, что я не могу вызвать setText attempt to call global 'setText' <a nil value> Я пытался использовать soundButton:setText(""), но это тоже не работает.
Есть ли образец, которому я могу следовать, чтобы достичь того, чего хочу?

1 Ответ

4 голосов
/ 17 августа 2011

Лично я бы взял "onEvent", вот так:

function soundButton:onEvent(event)
  if sound then       
    sound = false     
    self:setText("Sound on")
  else
    sound = true
    self:setText("Sound off")
  end
end

Но если вы действительно хотите сохранить его, тогда onEvent должен быть объявлен как функция, которая принимает два параметра: (явный) собственный параметр и событие. Тогда звонок все еще self:setText.

Например:

local soundButton = Button.newButton{
  text = "Sound off",
  onEvent = function(self, event)
    if sound then
      sound = false; self:setText("Sound on")
    else
      sound = true; self:setText("Sound off")
    end
  end
}
...