x:foo()
- это просто синтаксический сахар для x.foo(self)
Это верно в контексте определения функции, но не как выражение.
function x.y.z:foo(a, b)
print(self, a, b)
end
- это то же самое, что
function x.y.z.foo(self, a, b)
print(self, a, b)
end
Определение функции , устанавливаемое в поле таблицы, может быть методом, то есть с :
.Поля вложенных таблиц также допустимы для методов и не методов, если ключи являются строками, которые являются действительными идентификаторами Lua, как в x.y.z
.
Но
print(x.y().z:foo(a, b))
одинаковоas
local _ = x.y().z
print(_.foo(_, a, b))
С синтаксисом вызова метода , левая часть :
является выражением (x.y().z
), которое вычисляется только один раз.