подскажи, item:extend() синтаксис двоеточия что тут означает? похоже на вызов метода, но чем тогда отличается от item.extend()
function mytable:foo(a, b, c)
return self, a, b, c
end
==
function mytable.foo(self, a, b, c)
return self, a, b, c
end
==
mytable.foo = function (self, a, b, c)
return self, a, b, c
end
mytable:foo(10, 20, 30)
==
mytable.foo(mytable, 10, 20, 30)
Двоеточие — синтакстческий сахар.
При объявлении функции, оно инициализирует первый аргумент под названием "self".
При вызове он пропихивает таблицу, в которой находится функция, первым аргументом в вызываемую функцию.
item:extend() == item.extend(item)
У этого даже есть применение, например ты можешь вызвать "метод" объекта с другим объектом, а ля object.callsome(anotherobject).
Потом привыкнешь и у тебя будут вопросы, почему у других яп не так, и почему методы у остальных яп графически не отличаются от функций.