Rubular свободен, прост в использовании и выглядит хорошим.
Уже существует неявное преобразование в области из scala.Predef
. Вам не нужно объявлять собственное неявное преобразование, чтобы добавить метод toInt
в String
. У вас есть 3 варианта (я бы выбрал последний!):
asInt
Predef
toInt
, который поставляется в комплекте с библиотекой scala . Обратите внимание, что scala будет использовать неявное преобразование в области видимости, только если оно уникально .
Дело в том, что Java не определяет метод toInt
для String
. В Scala этот метод определяется классом StringOps
(Scala 2.8) или RichString
(Scala 2.7).
С другой стороны, существует метод toInt
также доступен на Int
(может быть, через другой неявный?), Поэтому компилятор не знает, нужно ли преобразовать строку в StringOps
через определенный неявный или в Int
через свой собственный неявный.
Чтобы решить эту проблему, вызовите неявный явно.
object Imp {
implicit def string2Int(s: String): Int = augmentString(s).toInt
def f(i: Int) = i
def main(args: Array[String]) {
val n: Int = f("666")
}
}
Думаю, у меня есть обходной путь.
Если я создаю RichString из аргумента String, происходит неявное преобразование RichString в Int с использованием неявного метода, который я предоставляю (это работает для 2.7.x и 2.8). Если я удалю свой неявный, я получаю ошибку типа.
object Imp {
implicit def string2Int(rs: RichString): Int = rs.toInt
def f(i: Int) = i
def main(args: Array[String]) {
val n: Int = f(new RichString("666"))
println(n)
}
}
Я все еще не понимаю, почему оба имплицита попали в область видимости и столкнулись, когда я предоставил неявное, и почему Predef не вошел в область действия, когда я этого не сделал. Не предоставил один для String to Int. Я полагаю, что вопрос о неявном преобразовании String в Int остается открытым.
m все еще не понимает, почему оба имплицита попали в область видимости и столкнулись, когда я предоставил неявное, и почему Predef не вошел в область, когда я не предоставил один для String to Int. Я полагаю, что вопрос о неявном преобразовании из String в Int остается открытым. m все еще не понимает, почему оба имплицита попали в область видимости и столкнулись, когда я предоставил неявное, и почему Predef не попал в область видимости, когда я не предоставил один для String to Int. Я полагаю, что вопрос о неявном преобразовании String в Int остается открытым.