Scala Predef unmport

And*_*ert 9 import scala predef

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

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

ret*_*nym 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
}
Run Code Online (Sandbox Code Playgroud)

我认为这不适用于Scala脚本或REPL.还有一个不受支持的选项,-Yno-predef用于全局自动导入.

相关:SI-1931

  • Predef unmporting必须在文件(不在REPL中)和第一次导入中完成. (3认同)
  • SI-1931 显然在 2.11.8 中出现,因此它将在 REPL 中工作。 (2认同)