作者:我是80初 | 来源:互联网 | 2023-08-13 09:03
仅当在 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 具有这种能力。