2013-03-07 131 views
1

,如果我在斯卡拉2.10 REPL(交互式斯卡拉壳)编写方法:斯卡拉REPL不能自动完成的是来自隐式转换

"""\w""". 

而且按TAB它给了我:

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

然而,缺少.r。当我把相同的字符串放入eclipse中时,它也为我提供了.r。如果我之前插入import scala.util.matching._,情况也是如此。 为什么REPL不提供所有可能性?

如果我尝试使用unicode,例如REPL,REPL会带来更大的问题。我写:

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

并按TAB 它给我的错误:

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

再次,它工作正常在Eclipse。

REPL是如此的错误,还是我错过了什么?

回答

1

的REPL仅显示字段和对象的方法,而.r只能通过其把它变成一个StringOps的隐式转换(augmentStringscala.Predef)。除了这个事实需要实施,没有人会这么做,这可能没有任何理由。当然,您仍然可以拨打.r

Scala IDE足够智能,可以在resolve implicits的地方使用,这就是为什么您可以在那里看到它的原因。

+0

链接已过期 – sygi 2015-02-25 13:35:11

2

是的,r缺失,但如果你写"""\w""".r并按下输入它仍然工作res0: scala.util.matching.Regex = \w。标签自动完成r似乎并不是真正必要的。 unicode问题可能是由java引起的。如果您将-Dfile.encoding=UTF-8传递给java,您可以明确请求UTF-8。这是一个post,它描述了如何做到这一点。

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

+0

谢谢,我同意以下例外情况:“为r选项卡自动完成似乎并不是真正必要的。” - 当你在寻找可能性时(如果你不确定使用哪种功能),这是必要的 – xhudik 2013-03-07 09:30:40

+0

是的,那是真的。 – maxmc 2013-03-07 09:52:43