'值丢弃不是String'的成员虽然应该(使用IDEA12)

时间:2014-01-12 13:01:14

标签: scala intellij-idea

我在变量上使用方法时遇到问题。通常,Scala编译器抱怨没有这样的方法可用,即使我的IDE(IDEA12)自动填充可用的方法,并且它在Scala Docs中定义。

例如。

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

非常感谢您的任何建议。

编辑说这只发生在字符串中,所有其他类型都不受影响。 我似乎有导入“import scala.Predef.String”并删除它会清除错误,但是稍后在Proguard阶段编译失败。

1 个答案:

答案 0 :(得分: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.