Ho difficoltà a spiegare la differenza di comportamento tra valori impliciti aggiuntivi ricercati da un valore implicito primario o una conversione implicita . In particolare, questo funziona:Perché Scala non riesce a trovare un valore implicito secondario in questo caso particolare?
trait Foo[A]
implicit def fooString: Foo[String] = null
implicit def value[A](implicit foo: Foo[A]) = 5
> implicitly[Int]
5
Ma questo non lo fa:
implicit def conversion[A](x: Int)(implicit foo: Foo[A]) = new {
def aMethod = 5
}
> 1.aMethod
could not find implicit value for parameter foo: test.Foo[A]
Variante:
- Se la ricerca viene avviata
implicitly
o una conversione implicita - Sia l'implicito secondaria valore ricercato è polimorfo
- Se il valore implicito secondario fornito è polimorfico
ottengo i seguenti risultati:
Conversion/value Searching for Supplied | Works?
---------------- ------------- -------- | ------
conversion poly poly | yes
conversion poly mono | **no**
conversion mono poly | yes
conversion mono mono | yes
value poly poly | yes
value poly mono | yes
value mono poly | yes
value mono mono | yes
Come si può vedere, l'unico caso che non funziona è quando la ricerca viene avviata da una conversione implicita, il valore cercato è polimorfico, tuttavia il valore fornito è monomorfico.
Esiste un motivo teorico per cui questo dovrebbe essere il caso, oppure si tratta di un bug/limitazione di Scala?
Risposta giusta, domanda sbagliata ;-) –