Raku 运算符重载
Raku operator overloading
使用以下代码:
use v6d;
# sub circumfix:<α ω>( @a ) {
# @a[0] >= @a[1] & @a[0] <= @a[2];
# };
sub circumfix:<α ω>( $a, $b, $c ) {
$a >= $b & $a <= $c;
};
if (α <5 0 10> ω) {
say 'Truthy';
}
else {
say 'Falsey';
}
结果:
(base) hsmyers@BigIron:~/board$ perl6 ./op.p6
Too few positionals passed; expected 3 arguments but got 1
in sub circumfix:<α ω> at ./op.p6 line 7
in block <unit> at ./op.p6 line 11
而将注释块切换为其他定义会导致:
(base) hsmyers@BigIron:~/board$ perl6 ./op.p6
Truthy
我要的是破解版(三个参数),谁能解释一下为什么破解了?
D:\>6e "say <5 0 10>"
(5 0 10)
这不是三个参数。它是一个包含三个值(IntStr
类型)的列表,因此只有一个参数。
<5 0 10>
字面上构造一个List
,一个单List
.
一个类比是要做的事情列表,待办事项列表。待办事项清单有多少?这是 1 -- 一个待办事项列表。
因此您得到错误信息:
expected 3 arguments but got 1
您想要的是指定您想要一个值,该值本身由多个值组成。这是一种方法:
sub circumfix:<α ω>( ( $a, $b, $c ) ) ...
(
和 )
的附加周围导致 destructuring。
使用以下代码:
use v6d;
# sub circumfix:<α ω>( @a ) {
# @a[0] >= @a[1] & @a[0] <= @a[2];
# };
sub circumfix:<α ω>( $a, $b, $c ) {
$a >= $b & $a <= $c;
};
if (α <5 0 10> ω) {
say 'Truthy';
}
else {
say 'Falsey';
}
结果:
(base) hsmyers@BigIron:~/board$ perl6 ./op.p6
Too few positionals passed; expected 3 arguments but got 1
in sub circumfix:<α ω> at ./op.p6 line 7
in block <unit> at ./op.p6 line 11
而将注释块切换为其他定义会导致:
(base) hsmyers@BigIron:~/board$ perl6 ./op.p6
Truthy
我要的是破解版(三个参数),谁能解释一下为什么破解了?
D:\>6e "say <5 0 10>"
(5 0 10)
这不是三个参数。它是一个包含三个值(IntStr
类型)的列表,因此只有一个参数。
<5 0 10>
字面上构造一个List
,一个单List
.
一个类比是要做的事情列表,待办事项列表。待办事项清单有多少?这是 1 -- 一个待办事项列表。
因此您得到错误信息:
expected 3 arguments but got 1
您想要的是指定您想要一个值,该值本身由多个值组成。这是一种方法:
sub circumfix:<α ω>( ( $a, $b, $c ) ) ...
(
和 )
的附加周围导致 destructuring。