2014-01-12 26 views
1

我在變量上使用方法有問題。通常Scala編譯器會抱怨說,即使我的IDE(IDEA12)自動完成可用的方法,並且它在Scala Docs中定義,也沒有這種方法可用。'值降不是字符串'的成員,雖然它應該是(使用IDEA12)

例如。

val x:String = "abc" 
var y:String = null 

y = x.drop(1) 

結果:

error: value drop is not a member of String 
y = x.drop(1) 

有趣的相同與發生:

var x = List.fromArray(y)  //why does this work and not below? 
var x = y.toList 

第一棄用(和建議使用.toList)功能工作正常,第二個方法拋出了相同的「不是」編譯時錯誤的成員。

我正在使用Scala 2.10

非常感謝您的任何建議。

編輯說這隻發生在字符串,所有其他類型不受影響。 我似乎有導入「導入scala.Predef.String」並刪除這個清除錯誤,但編譯後來在Proguard階段失敗。

+0

你_sure_您使用Scala的2.10編譯的代碼?你如何編譯它? –

+0

您好,這是IDEA 12與Android SDK,是的編譯器是Scala 2.10.3。 C:\ Users \ ed> scala 歡迎來到Scala版本2.10.3(Java HotSpot™64位服務器虛擬機,Java 1.7.0_0 9) –

+1

這是REPL而不是Scala編譯器。編譯Scala代碼的步驟是什麼? –

回答

3

這是您如何禁用Predef自動導入。 (另外還有選項-Yno-predef。)

scala> :pa -raw 
// Entering paste mode (ctrl-D to finish) 

import Predef.String 
object X { "abc".drop(1) } 

// Exiting paste mode, now interpreting. 

<pastie>:2: error: value drop is not a member of String 
object X { "abc".drop(1) } 
       ^
There were compilation errors! 

如果你需要有選擇性地禁用:

scala> :pa -raw 
// Entering paste mode (ctrl-D to finish) 

import Predef.{ assert => _, _} 
object X { "abc".drop(1) } 

// Exiting paste mode, now interpreting. 
相關問題