scala - 如何在 Scala 中取消导入 String "+"运算符?

标签 scala scala-2.8

我正在编写一个 DSL,其中“+”运算符严格是数字,就像其他一些流行语言一样。它很接近,但是字符串“+”运算符搞乱了我的隐式转换。取消导入 String 类的运算符的语法是什么?

为了更清楚,而不是这样:

scala> var x = "2" + 3;
x: java.lang.String = 23

我想得到 x: Int = 5

我想我只需要两件事就能实现这一点:

  • 从字符串中删除(在我的范围内卸载)“+”的定义
  • 定义 String 到 Int 的隐式转换

我被困在第一步了。

谢谢

最佳答案

根据Scala spec第12.3.1节,String+ 方法经过编译器的特殊处理。我不确定,但我认为这意味着您无法“取消导入”它,这是一种耻辱,因为它确实破坏了类型系统(很像相关的 toString 方法)。

您能否在 DSL 中为运算符使用不同的名称,例如 ++&

关于scala - 如何在 Scala 中取消导入 String "+"运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2664274/

相关文章:

javascript - Play framework 2 scala 模板 - JavaScript

scala - 运行 reduceLeft 时类型不匹配

scala - 如何使用 A 的值作为映射中的键将 Seq[A] 转换为 Map[Int, A]?

scala - Scala为在JVM上运行做出了哪些妥协?

scala - Scala 中什么时候需要 @uncheckedVariance?为什么在 GenericTraversableTemplate 中使用它?

scala - 找不到元素类型 T 的类 list

algorithm - 计算给定 z 的 z3 = x2y2 的整数解的数量

scala - 如何在 Scala Slick 中运行补丁/部分数据库更新?

scala - 输入隐式的同义词?

scala - Scala 中可变集合的迭代器?