【问题标题】:Scala Predef unimport [duplicate]Scala Predef unimport [重复]
【发布时间】:2011-10-03 10:51:16
【问题描述】:

可能重复:
How to unimport String “+” operator in Scala?

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

【问题讨论】:

标签: scala import predef


【解决方案1】:

正如链接答案中提到的,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

【讨论】:

  • 谢谢!所以 te 下划线的另一个用例。
  • 在 2.10 中似乎不起作用:import Predef.{boolean2Boolean => _} -> [ERROR] Note that implicit conversions are not applicable because they are ambiguous: both method Boolean2boolean in object Predef of type (x: Boolean)Boolean and method safeBoolean2boolean are possible conversion functions from Boolean to Boolean
  • Predef 取消导入必须在文件中(而不是在 REPL 中)和第一次导入中完成。
  • SI-1931 显然是在 2.11.8 登陆的,所以它可以在 REPL 中工作。
  • 它实际上在 2.112.12 的 REPL 中工作。
猜你喜欢
  • 2016-03-24
  • 1970-01-01
  • 2012-02-21
  • 2014-06-12
  • 1970-01-01
  • 2021-02-23
  • 2019-03-23
  • 2018-03-19
  • 2023-03-06
相关资源
最近更新 更多