Почему этот явный вызов метода Scala позволяет его неявно разрешить?
Почему этот код не компилируется, но компилируется успешно, когда я раскомментирую указанную строку? (Я использую Scala 2.8 по ночам). Кажется, что явноstring2Wrapper
позволяет использовать его неявно с этого момента.
class A {
import Implicits.string2Wrapper
def foo() {
//string2Wrapper("A") ==> "B" // <-- uncomment
}
def bar() {
"A" ==> "B"
"B" ==> "C"
"C" ==> "D"
}
object Implicits {
implicit def string2Wrapper(s: String) = new Wrapper(s)
class Wrapper(s: String) {
def ==>(s2: String) {}
}
}
}
редактироватьСпасибо за ответы, которые включают указатель на комментарий Мартина Одерского,
«Неявное преобразование без явного типа результата видно только в тексте после его собственного определения. Таким образом, мы избегаем ошибок циклических ссылок».
Мне все еще было бы интересно узнать 1) в чем опасность «циклических ошибок ссылок»? 2) Почему явный вызов имеет значение?