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