Почему этот код не компилируется, но успешно компилируется, когда я раскомментирую указанную строку? (Я использую 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) Почему явный вызов имеет какое-то значение?