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

Я пытаюсь хранить разные функции в таблице, но почему-то это не работает так, как я думал. Вот мой "код"

fn_table = { aFun1=print, aFun2=self:getSpeedLevel, aFun3=.... }

Проблема сейчас в том, что я могу сделать это со встроенными функциями, такими как print, assert и т. д., но это не будет работать с другими функциями, которые у меня есть.

Я получаю сообщение об ошибке: "... аргументы функции ожидаются рядом с '}'

Можно ли сохранить и эти функции?


person Florian    schedule 06.05.2011    source источник


Ответы (1)


aFun2 = self:getSpeedLevel — это синтаксическая ошибка, и это то, на что жалуется Lua. Попробуйте aFun2 = getSpeedLevel или aFun2 = self.getSpeedLevel (при условии, что self — это таблица). В главе Объектно-ориентированное программирование в книге PiL есть больше примеров хранения функций в таблицах. .

person antonakos    schedule 06.05.2011
comment
Чтобы еще больше уточнить, нотация двоеточия на самом деле просто синтаксический сахар по сравнению с точечной нотацией. То есть self:getspeed() на самом деле является self.getspeed(self) - person jhocking; 07.05.2011
comment
Большое спасибо за этот комментарий - я сходил с ума, пытаясь понять, почему self.func() не работает, а self:func() работает... - person Florian; 08.05.2011
comment
Кстати, если вы хотите, чтобы вызов OO работал при вызове aFun2, вам нужно обернуть его как function(...) self:getSpeedLevel(...) end. - person Stuart P. Bentley; 17.05.2011