2014-09-21 4 views
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.

Почему компилятор утверждает, что существует двусмысленность?

ответ

Смежные вопросы