假设我有以下类:
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
相同?
我猜这只适用于在instance对象上调用的方法,使用操作符的multi operator-type:<OP>(T $lhs, T $rhs) { }
语法是正确的方法,但我不确定。
例如,在Python中,以运算符命名的特殊方法(例如operator.__add__
)和运算符(例如+
)之间似乎存在对应关系。此外,自定义类的任何运算符重载都是在类内部完成的。
发布于 2019-04-23 23:12:09
class A {
has $.val;
method Str { $!val ~ 'µ' }
}
multi infix:<~>(A:D $lhs, A:D $rhs) {
('(', $lhs.val, ',', $rhs.val, ')', 'µ').join;
}
dd A.new(val => "A") ~ A.new(val => "B"); # "(A,B)µ"
所以,是的,这是正确的方式。如果要覆盖+
,则要创建的子对象的名称为infix:<+>
。
您还可以通过使用:U
"type smiley“来提供类型对象的大小写,例如:
multi infix:<~>(A:U $lhs, A:U $rhs) {
'µ'
}
希望这能回答你的问题。
https://stackoverflow.com/questions/55814075
复制相似问题