Допустим, у меня есть следующий класс:
class A {
has $.val;
method Str { $!val ~ 'µ' }
}
# Is this the right way of doing it?
multi infix:<~>(A:D $lhs, A:D $rhs) {
('(', $lhs.val, ',', $rhs.val, ')', 'µ').join;
}
Как бы я перегрузил оператор (например, +
) для класса таким же образом, как Str
в предыдущем классе?
Я предполагаю, что это работает только для методов, которые вызываются на объекте экземпляра и с использованием multi operator-type:<OP>(T $lhs, T $rhs) { }
для операторов - правильный путь, но я Я не уверен.
Например, в Python, похоже, существует соответствие между специальными методами, названными в честь операторов (например, operator.__add__
) и операторов (например, +
). Кроме того, любая перегрузка оператора для пользовательского класса выполняется внутри класса.