Raku 中的 REPL 现在有一些令人迷惑的行为, 和直接使用 raku filename.raku
脚本的结果相比, 有一些不一致的行为。
自定义运算符
prefix
在 REPL 中定义的前缀和预期的一样:
> !1
False
> sub prefix:<!>($a) { -$a }
&prefix:<!>
> !5
-5
infix
在 REPL 中自定义运算符时, 如果使用的运算符名在系统核心中已经存在, 那么自定义的运算符会被遮盖:
> sub infix:<!>($a, $b) { $a + $b }
&infix:<!>
> !(1,4) # 调用的是取反运算符
False
> infix:<!>(1,4) # 调用的是自定义的运算符
5
postfix
在 REPL 中定义后缀运算符的时候, 完全不能使用:
> sub postfix:<!>(Int $n where $n > 0) { [*] 1..$n}
&postfix:<!>
> say 3!;
===SORRY!=== Error while compiling:
Negation metaoperator not followed by valid infix
------> say 3!⏏;
expecting any of:
infix
infix stopper
但是在脚本中是可以正常运行的。