http://www.lua.org/pil/16.html
Когда вы объявляете функцию с использованием синтаксиса: есть неопределенный параметр «self», который является объектом, над которым работает функция.Вы можете вызвать метод, используя синтаксис двоеточия:
util:foo("Hello World")
Если вы используете точечную нотацию, вы ссылаетесь на функцию как на запись в таблице util, и вам нужно передать 'self 'self.
Если foo объявлен с двоеточием, эти два вызова эквивалентны:
util:foo("Hello World")
util.foo(util, "Hello World")
Чтобы объявить то же самое с синтаксисом точки, вы должны сделать это:
function util.foo(self, p)
print (p or "p is nil")
end
или
util.foo = function(self, p)
print (p or "p is nil")
end