1

如果我用 scala 2.10 REPL(交互式 Scala shell)编写:

 """\w""".

然后按TAB它给我:

+                     asInstanceOf          charAt                   
codePointAt           codePointBefore        
codePointCount        compareTo             compareToIgnoreCase       
concat                contains              ....

然而,.r不见了。当我将相同的字符串放入 Eclipse 时,它​​也提供给我.r。如果我之前插入也是如此import scala.util.matching._。为什么 REPL 没有提供所有的可能性?

如果我尝试使用 unicode,REPL 会遇到更大的问题,例如我写:

"""\p{L}""".

并按下TAB 它会给我错误:

scala> """\p{L}""".<console>:1: error: unclosed multi-line string literal
"""
^

同样,它在 Eclipse 中运行良好。

REPL 有这么多错误,还是我错过了什么?

4

2 回答 2

2

是的,r丢失了,但是如果你写"""\w""".r并按回车,它仍然可以工作res0: scala.util.matching.Regex = \w。具有选项卡自动完成功能r似乎并不是必需的。unicode问题可能是由java引起的。如果您传递-Dfile.encoding=UTF-8给 java,您可以显式请求 UTF-8。这是一篇描述如何做到这一点的帖子。

如果您使用 Eclipse,我可以推荐Scala 工作表插件,它是一个非常好的 repl 替代品。

于 2013-03-07T09:26:37.407 回答
1

REPL 仅显示对象的字段和方法,而.r只能通过隐式转换 ( augmentStringin scala.Predef) 将其转换为StringOps. 除了需要实施并且没有人来做这件事之外,这可能没有任何理由。当然,你仍然可以调用.r这个。

Scala IDE 足够聪明,可以解决 implicits,这就是您可以在那里看到它的原因。

于 2013-03-07T10:02:08.370 回答