我正在编写一种DSL,其中“+”运算符严格为数字类型,就像其他一些流行的语言一样。这很接近目标,但是字符串“+”运算符正在破坏我的隐式转换。有没有方法可以取消导入String类中的运算符?
为了更加清晰,假设现在有如下代码:
scala> var x = "2" + 3; x: java.lang.String = 23
我希望得到的结果是 x: Int = 5
我想我只需要两个步骤就可以实现:
- 从Strings中移除(在我的作用域内取消导入)"+"的定义
- 定义一个String到Int的隐式转换
我卡在了第一步上。
谢谢
any2stringadd
被用在左操作数不支持+
运算符,但右操作数是字符串的情况下。(要查看示例,请运行scala -Xprint:typer
并执行new Object + "ZZZZZ"
)相比之下,"ZZZZZ" + new Object
可以使用已定义在String
上的+
运算符,所以不会使用any2stringadd
。 - Ken Bloom