Не могу скастить стрингу в инт в implicit методе
Есть такое простой код:
def main(args: Array[String]): Unit = {
implicit def stringToInt(string: String): Int = string.toInt
def sum(x: Int, y: Int): Int = {
x + y
}
println(sum("1", "2"))
}
Получаю такую ошибку:
type mismatch;
found : string.type (with underlying type String)
required: ?{def toInt: ?}
Note that implicit conversions are not applicable because they are ambiguous:
both method augmentString in object Predef of type (x: String): scala.collection.StringOps
and method stringToInt of type (string: String): Int
are possible conversion functions from string.type to ?{def toInt: ?}
implicit def stringToInt(string: String): Int = string.toInt
Подскажите, пожалуйста, в чем дело.
Ответы (1 шт):
Автор решения: BccHnw
→ Ссылка
В методе stringToInt вызывается метод toInt, который используется тот же механизм неявного преобразования, что и сам метод stringToInt. Из-за этого возникает коллизия определения: компилятор не знает, то ли использовать преобразование при помощи stringToInt, то ли (штатное) преобразование в StringOps.
Решается просто. Нужно использовать явное преобразование в Int:
implicit def stringToInt(string: String): Int = Integer.parseInt(string)
def sum(x: Int, y: Int): Int = {
x + y
}
println(sum("1", "2"))
Т.е. вызов toInt заменен на Integer.parseInt(...)