Perché questo può essere compilato con parametri di tipo:errore di compilazione quando mescolo impliciti, parametri di tipo e niente
error: value explode is not a member of Test.A[Nothing]
Se rimuovo loro, allora si compila. Cosa non sto capendo e, cosa più importante, cosa posso fare per risolverlo.
object Test extends App {
implicit class B[E](set: A[E]) {
def explode() = println("boom")
}
case class A[E](name: String)
A[Nothing]("coldplay").explode()
}
(I parametri di tipo in questo esempio non fare nulla, ma nel vero e proprio caso d'uso mondo che avere più parametri di tipo, e alcuni possono essere niente e alcuni non lo sono).
A quanto pare, l'impostazione del parametro di tipo a 'Nothing' è direttamente ciò che sta causando il problema: entrambi nudi 'A (" coldplay "). Explode()' (che è, in effetti, 'A [Nothing]') e qualsiasi altro tipo specificato, ad esempio 'A [String] (" coldplay "). Explode()' funziona bene Per quanto riguarda il "perché", aspetterò che qualcun altro risponda, semplicemente perché non lo so ... :) –
Sì, io uso Nulla nel caso di uso del mondo reale e questo è quando ha iniziato a far esplodere. – monkjack
Se si utilizza '-Xlog-implicit-conversions' e' -Xlog-implicits' è possibile ottenere maggiori informazioni. Sembra 'A (" coldplay "). Explode()' funziona perché la conversione implicita viene applicata prima di risolvere i parametri di tipo. Con 'A [Nothing] (" coldplay "). Explode()', il compilatore si rifiuta di dedurre 'Nothing' come parametro type su' B', anche se non ho idea del perché. – wingedsubmariner