Lua: таблица функций

#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 .