Может ли кто-нибудь объяснить мне следующую ситуацию с механизмом неявных преобразований Scala. Есть код:
object Main {
implicit val x:Int => String = v => "val"
implicit def y(v:Int) = "def"
def p(s:String) = print(s)
def main(args: Array[String]): Unit = {
p(1)
}
}
Этот код печатает "val". Но когда я комментирую вторую строку:
//implicit val x:Int => String = v => "val"
код печатает "def".
Таким образом, в этой ситуации возможны оба неявных преобразования (x и y). Существует правило не-неоднозначности - неявное преобразование вставляется, только если нет другого возможного преобразования для вставки. Согласно этому правилу этот код вообще не должен компилироваться. Но код успешно скомпилирован и выполнен. Что я не понимаю?
Спасибо.