我正在写一个DSL,其中“+”运算符是严格数字的,就像其他一些流行语言一样。它很接近,但String“+”运算符搞乱了我的隐式转换。 unmporting String类的运算符的语法是什么?
为了更清楚,而不是:
scala> var x = "2" + 3; x: java.lang.String = 23
我想获得x:Int = 5
我想我只需要做两件事就可以实现:
我坚持第一步。
由于
答案 0 :(得分:9)
根据Scala spec的第12.3.1节,+
String
方法由编译器进行特殊处理。我不确定,但我认为这意味着你不能“不引用”它,这是一种耻辱,因为它确实打破了类型系统(很像相关的toString
方法)。
您可以在DSL中为运营商使用其他名称,例如++
或&
吗?
答案 1 :(得分:3)
字符串的+方法是String类的一个方法(因此在每个字符串对象上),因此不能不导入。
答案 2 :(得分:1)
你不能不引用它,但你可以使用+:并在int类上定义它。如果你这样写的最好的是:“2”.toInt + 3。