Да, есть разница. Второй не компилируется. Так что у него нулевая производительность;)
«Объявление метода» - просто синтаксический сахар в Lua. Они идентичны:
function object.func(self, param)
end
function object:func(param)
end
Но этот сахар только работает, если вы называете функцию как часть объявления функции.
Синтаксис ':' для доступа к "методам" в Lua работает только для доступа к функциям, которые хранятся в таблице, названной строковым ключом. Вы не можете использовать этот синтаксис для установки значения таблицы.
Или, иначе говоря, нет другого способа сделать это:
function object:func(param)
end
без явного указания параметра «self» в качестве первого параметра.