我对 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 中测试了上述代码。
经过进一步检查,这似乎是 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