在 raku REPL 中定义后缀运算符时出现问题
Problem defining postfix operators in raku REPL
如果我在 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
但是如果我在 raku REPL 中定义这个函数我得到:
> * * &factorial
> 5
> El factorial de 5 es 120
对于阶乘函数,它正常工作并且符合预期,但我得到了!运算符:
> * * &postfix:<!>
> ===SORRY!=== Error while compiling:
Negation metaoperator not followed by valid infix
------> say "Si calculamos $n! obtenemos {$n!⏏}";
expecting any of:
infix
infix stopper
我需要一个特殊的语法来在 raku REPL 中定义运算符,或者取决于环境的加载方式。
我正在使用 In OSX Catalina
trabajando-en-piensa-en-raku on master [?] via v2.6.5
❯ rakubrew versions
system
moar-2020.07
* moar-2020.08.2
恐怕 REPL 在其当前状态下,在 Raku 的几个特性方面存在一些不足,例如本机变量和运算符定义,IF 这些在不止一个中执行线.
目前 REPL 基本上是为每一行执行一个 EVAL
语句,调用之间没有足够的信息共享。这在短期内不会改变运行。明年某个时候 rakuast 分支登陆时,它可能会变得更好。
如果我在 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
但是如果我在 raku REPL 中定义这个函数我得到:
> * * &factorial
> 5
> El factorial de 5 es 120
对于阶乘函数,它正常工作并且符合预期,但我得到了!运算符:
> * * &postfix:<!>
> ===SORRY!=== Error while compiling:
Negation metaoperator not followed by valid infix
------> say "Si calculamos $n! obtenemos {$n!⏏}";
expecting any of:
infix
infix stopper
我需要一个特殊的语法来在 raku REPL 中定义运算符,或者取决于环境的加载方式。
我正在使用 In OSX Catalina
trabajando-en-piensa-en-raku on master [?] via v2.6.5
❯ rakubrew versions
system
moar-2020.07
* moar-2020.08.2
恐怕 REPL 在其当前状态下,在 Raku 的几个特性方面存在一些不足,例如本机变量和运算符定义,IF 这些在不止一个中执行线.
目前 REPL 基本上是为每一行执行一个 EVAL
语句,调用之间没有足够的信息共享。这在短期内不会改变运行。明年某个时候 rakuast 分支登陆时,它可能会变得更好。