Raku 运算符重载

hsm*_*ers 8 operator-overloading raku

使用以下代码:

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';
}
Run Code Online (Sandbox Code Playgroud)

结果是:

(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
Run Code Online (Sandbox Code Playgroud)

而切换其他定义的注释块会导致:

(base) hsmyers@BigIron:~/board$ perl6 ./op.p6
Truthy
Run Code Online (Sandbox Code Playgroud)

损坏的版本(带有三个参数)是我想要的版本,有人可以解释它为什么损坏吗?

rai*_*iph 10

<5 0 10>从字面上构建了一个List,一 List

一个类比是一份要做的事情清单,一份待办事项清单。一个待办事项清单有多少内容?它是 1 - 一个待办事项列表。

因此,您会收到错误消息:

expected 3 arguments but got 1

您想要的是指定您想要一个本身由多个值组成的值。这是一种方法:

sub circumfix:<? ?>( ( $a, $b, $c ) ) ...
Run Code Online (Sandbox Code Playgroud)

额外的包围()造成破坏


Hol*_*lli 7

D:\>6e "say <5 0 10>"
(5 0 10)
Run Code Online (Sandbox Code Playgroud)

这不是三个论点。它是三个值(类型IntStr)的列表,因此是一个参数。