在 raku REPL 中定义后缀运算符的问题

anq*_*egi 6 rakudo raku

如果我在 raku 中有以下程序,它运行良好:

trabajando-en-piensa-en-raku on ? master [?] via  v2.6.5
? cat factorial.raku

sub factorial( $n ) {
   [*] 1 .. $n;
}

sub postfix:<!>( $n ) {
    [*] 1 .. $n;
}

my $n = 5;

say "El factorial de $n es {factorial $n}";

say "Si calculamos $n! obtenemos {$n!}";


trabajando-en-piensa-en-raku on ? master [?] via  v2.6.5
? raku factorial.raku
El factorial de 5 es 120
si calculamos 5! obtenemos 120
Run Code Online (Sandbox Code Playgroud)

但是如果我在 raku REPL 中定义这个函数,我会得到:

> * * &factorial
> 5
> El factorial de 5 es 120
Run Code Online (Sandbox Code Playgroud)

对于阶乘函数,它可以正常工作并且符合预期,但我得到了这个!操作员:

> * * &postfix:<!>
> ===SORRY!=== Error while compiling:
Negation metaoperator not followed by valid infix
------> say "Si calculamos $n! obtenemos {$n!?}";
    expecting any of:
        infix
        infix stopper
Run Code Online (Sandbox Code Playgroud)

我需要一个特殊的语法来定义 raku REPL 中的运算符,或者取决于环境的加载方式。

我在 OSX Catalina 中使用

trabajando-en-piensa-en-raku on ? master [?] via  v2.6.5
? rakubrew versions
  system
  moar-2020.07
* moar-2020.08.2
Run Code Online (Sandbox Code Playgroud)

Eli*_*sen 6

恐怕 REPL 在其当前状态下,在一些 Raku 功能方面存在一些缺陷,例如本机变量和运算符定义,如果这些功能在不止一行中执行。

目前,REPL 基本上是EVAL为每一行执行一个语句,在调用之间没有足够的信息共享。这在短期内不会改变。明年某个时候,当 rakuast 分支登陆时,情况可能会好转。