在 Raku 中定义裸字运算符

问题描述 投票:0回答:1

我对 Raku 中定义裸字运算符有一些疑问。就语言而言,有多种裸字运算符,例如

div
mod
gcd
lcm
。由于我对这种语言的功能感到好奇,我尝试通过 infix:<d> 语法实现
Dice Notation
,如下所示:

 sub infix:<d>(Int $x, Int $y) {
        return (1..$y).roll($x)
}

但是每当我尝试使用类似

2 d 10
之类的内容时,编译器都会将其解释为术语,而不是运算符。

是否有可能首先定义裸字运算符,如果可以,我该怎么做?

我还想指出,我只在 REPL 中测试了上述代码。

syntax raku dice
1个回答
0
投票

经过进一步检查,这似乎是 REPL 中的一个错误。

裸字运算符可以在脚本中定义,但不能在其提供的 REPL 中使用,例如

sub vdiv(Int $x, Int $y){
return $x div $y, $x % $y;
}
our &feetinch = &vdiv.assuming(*,12);
sub infix:< d >(Int $x, Int $y) {
    return (1..$y).roll($x)
}
sub prefix:<d >(Int $x) {
    return $x.rand.Int+1
}

say 2 d 10;
say d 20

产生

(4 5)
9

当作为脚本运行时,但当作为单行语句输入 REPL 时...

Two terms in a row
------> say 2⏏ d 10
    expecting any of:
        infix
        infix stopper
        postfix
        statement end
        statement modifier
        statement modifier loop
© www.soinside.com 2019 - 2024. All rights reserved.