【发布时间】:2026-01-22 06:50:01
【问题描述】:
我正在编写一个 DSL,其中“+”运算符是严格数字的,就像其他一些流行的语言一样。它很接近,但字符串“+”运算符搞乱了我的隐式转换。取消导入 String 类的运算符的语法是什么?
只是为了更清楚,而不是这样:
scala> var x = "2" + 3; x:java.lang.String = 23我想得到 x: Int = 5
我想我只需要两件事就可以做到这一点:
- 从字符串中删除(在我的范围内取消导入)“+”的定义
- 定义 String 到 Int 的隐式转换
我被困在第一步。
谢谢
【问题讨论】:
-
我想“import scala.Predef.{any2stringadd => _}”会起作用。但事实并非如此。一定是我错过了什么。
-
any2stringadd用于左侧不支持+运算符的情况,但右侧是字符串。 (要查看实际情况,请运行scala -Xprint:typer并执行new Object + "ZZZZZ")相比之下,"ZZZZZ" + new Object可以使用已在String上定义的 + 运算符,因此不使用any2stringadd。