仅在使用repl时编译错误

仅当在 repl 中逐行输入代码时,我才会收到错误。当整个程序一次粘贴或从命令行粘贴时,它会起作用。

class A {
    method a () {
    return 1;
    }
}

class B {
    method b () {
    return 2;
    }
}

这是错误声明:

===SORRY!=== Error while compiling:
Package 'B' already has a method 'b' (did you mean to declare a multi method?)

这个屏幕截图可能会更清楚。在左边我只是粘贴了代码,在右边我一行一行地输入了它。该代码仍在工作,但导致错误的原因是什么?

出于某种原因,我无法仅使用一个类来重现这一点。

回答

我可以重现那个错误,看起来像一个 REPL 错误,或者只是 REPL 不准备做的事情。例如,这也会引发异常:

class A {
    method a() {
    return 1;
    }
};

class foo {
    has $.bar = 3;
};

无论采用哪种形式,都可以直接粘贴或分段粘贴。永远是二等舱。这可能与EVAL工作方式有关,但我真的不知道。归根结底,REPL 只能带您到此为止,我不完全确定这是否在用例范围内。对于比一行更复杂的任何事情,您可能希望使用Comma或任何其他 IDE,例如 emacs;逗号还为评估表达式甚至语法提供帮助。

  • 我是通过“emacs”发现的。当前用于 emacs 的 `raku-mode` 似乎对 repl 没有太多支持。当我尝试加载文件时,它将整个缓冲区逐行发送到 repl。我用 `require` 为文件编写了一些东西,但是像 `eval-region` 之类的东西......将需要 repl 具有这种能力。

以上是仅在使用repl时编译错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>