Определение методов Lua в качестве инициализации - PullRequest
3 голосов
/ 21 января 2011

На языке Lua я могу определять функции в таблице с чем-то вроде

table = { myfunction = function(x) return x end }

Мне было интересно, могу ли я создавать методы таким образом, вместо того, чтобы делать это как

function table:mymethod() ... end

Я вполне уверен, что таким способом можно добавлять методы, но я не уверен в правильном названии этого метода, и не могу найти его в поисках "lua" и "методов" или тому подобное.

Я собираюсь передать таблицу такой функции, как myfunction({data= stuff, name = returnedName, ?method?init() = stuff}).

К сожалению, я пробовал несколько комбинаций с объявлением метода двоеточия, но ни один из них не является допустимым синтаксисом.

Итак ... кто-нибудь здесь знает?

1 Ответ

5 голосов
/ 21 января 2011

Конечно: table:method() - это просто синтаксический сахар для table.method(self), но вы должны позаботиться об аргументе self. Если вы делаете

tab={f=function(x)return x end }

тогда tab:f(x) не будет работать, так как на самом деле это tab.f(tab,x) и, следовательно, вернет tab вместо x.

Вы можете посмотреть вики lua users по ориентации объекта или PiL глава 16 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...