【问题标题】:Scala REPL fails to autocomplete methods that comes from implicit conversionScala REPL 无法自动完成来自隐式转换的方法
【发布时间】:2013-03-07 09:18:21
【问题描述】:

如果我用 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 有这么多问题,还是我遗漏了什么?

【问题讨论】:

    标签: scala read-eval-print-loop


    【解决方案1】:

    是的,r 不见了,但是如果你写"""\w""".r 并按回车,它仍然可以工作res0: scala.util.matching.Regex = \wr 的制表符自动完成功能似乎并不是必需的。 unicode问题可能是由java引起的。如果将 -Dfile.encoding=UTF-8 传递给 java,则可以显式请求 UTF-8。这是一个post,它描述了如何做到这一点。

    如果您使用 Eclipse,我可以推荐 Scala worksheet plugin,这是一个非常好的 repl 替代品。

    【讨论】:

    • 谢谢,我同意以下例外:“为 r 设置选项卡自动完成功能似乎不是必需的。” - 当你在寻找可能性时这是必要的(如果你不确定要使用哪个功能)
    【解决方案2】:

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

    Scala IDE 对resolve implicits 足够智能,这就是您可以在那里看到它的原因。

    【讨论】:

    • 链接已过期
    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2012-03-12
    相关资源
    最近更新 更多