REPL

楽土

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

但是在脚本中是可以正常运行的。

comments powered by Disqus