Почему я не могу использовать набор: Union () вместо Set.union?
Вопрос
Я изучаю Луа, и я бы предпочел бы использовать толстую кишку (:
) для методов. К сожалению, это не работает везде. Смотри мой код:
Set = {} Набор функций mt = {{} mt = {}: новый (m) локальный set = {} setmetatable (set, mt) для a, b в парах (m) Установите набор [b] = Набор функций True Close Return. Union (A, B) Локальный res = Set: New ({}) для k в парах (а) do res [k] = true End for K в парах (b) do res [k] = True End Return RES END MT MT .__ add = set.union - почему установлено: Union () здесь не работает? S1 = Set: NEW {22,55,77} S2 = SET: NEW {2,5,3} S3 = S1 + S2
Как я могу использовать Set:union()
На упомянутом месте или здесь невозможно использовать?
Решение
Поскольку толстая кишка является синтаксическим сахаром только для определения и вызова функции. Как вы, вероятно, прочитали obj:f()
эквивалентно obj.f(obj)
а также function A:f()
эквивалентно function A.f(self)
. Отказ Это все толстой кишки для.
В вашем примере Set:union
не входит в ни одно из двух применений выше. Не на самом деле не больше, но не стесняйтесь спрашивать :)
Не связан с StackOverflow