我试图重载or自定义类的逻辑运算符,但它似乎不起作用。这是我的工作:
class A { has $.a }
multi sub infix:<or> (A $a, A $b) {
"works!({$a.a}, {$b.a})"
}
say A.new(:1a) or A.new(:2a);
Run Code Online (Sandbox Code Playgroud)
我期望将其works!(1, 2)作为输出获取,但我会获取A.new(a => 1),这是标准or运算符的结果。
其他运算符(and和除外xor)似乎对我有用:
class A { has $.a }
multi sub infix:<anything-else> (A $a, A $b) {
"works!({$a.a}, {$b.a})"
}
say A.new(:1a) anything-else A.new(:2a);
Run Code Online (Sandbox Code Playgroud)
结果works!(1, 2)。
我是不是做错了什么或有只是没有办法超载的标准or,and,xor运营商?
这个raku 文档页面说操作员,=应该连接
左侧变量的内容和右侧的表达式
以类相关的方式。该文档还提供了一个带有Hash变量的示例:
my %a = :11a, :22b;
%a ,= :33x;
say %a # OUTPUT: «{a => 11, b => 22, x => 33}?»
Run Code Online (Sandbox Code Playgroud)
这对我有用,但是当我尝试为Array一些令人困惑的事情做同样的事情时:
my @a = 1, 2;
@a ,= 3;
say @a
Run Code Online (Sandbox Code Playgroud)
输出类似于(\Array_94393785458840 = [Array_94393785458840 3]). 然而,我希望结果是[1, 2, 3]。
我的问题是:这是预期的行为吗?如果是这样,这种操作的目的是什么?