1
class Foo
implicit def fromInt[A <% Int](x: A) = new Foo // #1
implicit def fromString[A <% String](x: A) = new Foo // #2
0: Foo
даетНеявные преобразования не применяются, поскольку они являются неоднозначными
error: type mismatch;
found : Int(0)
required: this.Foo
Note that implicit conversions are not applicable because they are ambiguous:
both method fromInt of type [A](x: A)(implicit evidence$1: A => Int)this.Foo
and method fromString of type [A](x: A)(implicit evidence$2: A => String)this.Foo
are possible conversion functions from Int(0) to this.Foo
0: Foo
^
Я не уверен, я понимаю.
Если я удаляю # 2, он скомпилируется.
Если удалить # 1, он не компилировать
error: No implicit view available from Int => String.
0: Foo
^
Там нет никакой двусмысленности. fromString
is не a функция преобразования от Int
до Foo
.
Почему компилятор утверждает, что существует двусмысленность?