首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >类的重载运算符

类的重载运算符
EN

Stack Overflow用户
提问于 2019-04-23 22:59:36
回答 1查看 139关注 0票数 13

假设我有以下类:

代码语言:javascript
复制
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__)和运算符(例如+)之间似乎存在对应关系。此外,自定义类的任何运算符重载都是在类内部完成的。

EN

回答 1

Stack Overflow用户

发布于 2019-04-23 23:12:09

代码语言:javascript
复制
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“来提供类型对象的大小写,例如:

代码语言:javascript
复制
multi infix:<~>(A:U $lhs, A:U $rhs) {
    'µ'
}

希望这能回答你的问题。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55814075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档