2011-01-21 3 views
3

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

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

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

function table:mymethod() ... end 

Я довольно уверен, что можно добавлять методы таким образом, но я не уверен в правильном названии этого метода, и я не могу найти его ищет «Lua» и «методы» или такие.

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

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

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

ответ

5

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

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

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

Вы можете взглянуть на lua users wiki on object orientation или PiL chapter 16.

+0

О, это работает. ... я искал сложное решение, когда все так просто. Гм. Большое спасибо! – viktorry

+2

Просто комментарий - при создании «методов» первый параметр обычно называется «я». Это то, что делает сабкант функции tab: method(). Если вы хотите называть его «:», создайте свою функцию как таковую: tab = {f = function (self, x) return x end} и вызовите как tab: f (x). –

Смежные вопросы