#function #lua #lua-table
#функция #lua #lua-таблица
Вопрос:
Я пытаюсь сохранить различные функции в таблице, но почему-то это будет работать не так, как я думал. Вот мой «код»
fn_table = { aFun1=print, aFun2=self:getSpeedLevel, aFun3=.... }
Проблема сейчас в том, что я могу сделать это с помощью встроенных функций, таких как print
, assert
и так далее, Но это не будет работать с другими функциями, которые у меня есть.
Я получаю сообщение об ошибке: «… аргументы функции ожидаются рядом с ‘}’
Возможно ли также сохранить эти функции?
Ответ №1:
aFun2 = self:getSpeedLevel
это синтаксическая ошибка, и именно на это жалуется Lua. Попробуйте aFun2 = getSpeedLevel
или aFun2 = self.getSpeedLevel
(предполагая, что self
это таблица). В главе объектно-ориентированного программирования в книге PiL есть больше примеров функций, хранящихся в таблицах.
Комментарии:
1. Для дальнейшего пояснения, обозначение двоеточия на самом деле является просто синтаксическим сахаром по сравнению с обозначением точки. То есть self:getspeed() на самом деле является self.getspeed(self)
2. Большое вам спасибо за этот комментарий — я сходил с ума, пытаясь выяснить, почему self.func() не работает, в то время как self:func() работает…
3. Кстати, если вы хотите, чтобы вызов OO работал при вызове aFun2, вам нужно будет обернуть его как
function(...) self:getSpeedLevel(...) end
.