所以来自Predef的东西会自动导入到scala程序中。但是如何禁用 - 从Predef中取消导入某些或所有导入的函数?作为一个例子,如果我不喜欢String上的'+'运算符如何禁用此功能?
答案 0 :(得分:18)
如链接答案中所述,方法String#+(other: Any)
使用编译器魔术添加到String类,而不是使用隐式转换。因此,它与Predef._
的自动导入无关。
这同样适用于Int#+(x: String)
,以及其他值类型的相应方法。
但是,还有另一种字符串连接方法, 通过Predef
中的隐式转换添加。 x + "2"
被视为Predef.any2stringAdd(x).+("2")
。通过在文件的第一行显式导入Predef
,您可以将不需要的成员重命名为_
,并将其禁用。
import Predef.{any2stringadd => _, _}
object Test {
object A
A + "20" // error: value + is not a member of object Test.A
}
我认为这不适用于Scala脚本或REPL。还有一个不受支持的选项-Yno-predef
,用于全局自动导入。
相关:SI-1931