9

可能重复:
如何在 Scala 中取消导入字符串“+”运算符?

所以 Predef 中的东西会自动导入到 scala 程序中。但是如何禁用从 Predef 中取消导入某些或所有导入的函数?例如,如果我不喜欢 String 上的“+”运算符,如何禁用此功能?

4

1 回答 1

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

于 2011-10-03T12:15:52.857 回答