How to unimport String "+" operator in Scala?
I'm writing a DSL where the "+" operator is strictly numeric, like some other popular languages. It's close, but the String "+" operator is messing up my implicit conversions. What's the syntax for unimporting an operator of the String class?
Just to be clearer, instead of this:
scala> var x = "2" + 3; x: java.lang.String = 23
I'd like to get x: Int = 5
I imagine I just need 2 th开发者_如何学Cings to make that happen:
- Remove (unimport within my scope) the definition of "+" from Strings
- Define an implicit conversion of String to Int
I'm stuck on the first step.
Thanks
According to section 12.3.1 of the Scala spec, the +
method for String
has special treatment by the compiler. I don't know for sure, but I think this means you can't "unimport" it, which is a shame because it really breaks the type system (much like the related toString
method).
Could you use a different name for the operator in your DSL, eg, ++
or &
?
The + method for a string is a method on of the String class (and therefore on each string object), and as such it cannot be unimported.
You can't unimport it, but you could use +: and define it on the int class. What would be best is if you write it like this: "2".toInt + 3.
精彩评论