2013-03-07 19 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