Объявление метода в Lua - PullRequest
3 голосов
/ 23 июля 2011

Есть ли разница между этими двумя типами объявлений по производительности?

local object = newObject()

function object:method(params)
end

local object:method = function(params)
end

1 Ответ

7 голосов
/ 23 июля 2011

Да, есть разница. Второй не компилируется. Так что у него нулевая производительность;)

«Объявление метода» - просто синтаксический сахар в Lua. Они идентичны:

function object.func(self, param)
end

function object:func(param)
end

Но этот сахар только работает, если вы называете функцию как часть объявления функции.

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

Или, иначе говоря, нет другого способа сделать это:

function object:func(param)
end

без явного указания параметра «self» в качестве первого параметра.

...