首页 > 解决方案 > 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';
}

结果是:

(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

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

标签: operator-overloadingraku

解决方案


<5 0 10>从字面上构造一个List,一个单一 List的。

一个类比是一个待办事项列表,一个待办事项列表。一个待办事项列表有多少东西?它是 1 - 一个待办事项列表。

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

expected 3 arguments but got 1

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

sub circumfix:<α ω>( ( $a, $b, $c ) ) ...

额外的包围()导致解构


推荐阅读