我正在编写一个 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/