2017-03-15 1 views
1

Je ne parviens pas à implémenter shapeless.Generic avec des fonctions paramétrées de type scala. Dans le morceau de code suivant, j'obtiens une erreur "Impossible de trouver la valeur implicite pour le paramètre gen: shapeless.Generic [T]".Paramétrage de type Scala, Shapeless - impossible de trouver une valeur implicite pour le paramètre Générique

def foo[T](instance: T) = { 
    val gen = shapeless.Generic[T] //getting error in this line!!! 
    val values = gen.to(instance) 
    println(values) 
    } 
    case class Bar(x:String, y:String) 
    var bar = Bar("a","b") 
    foo(bar) 

Y at-il quelque chose qui me manque?

Répondre

3
def foo[T, HL <: HList](instance: T)(
    implicit gen: Generic.Aux[T, HL] 
) = { 
    val values = gen to instance 
    println(values) 
    } 

case class Bar(x: String, y: String) 

Vous devez utiliser généralement le modèle Aux, les génériques sont macro matérialisé mais produisent un type arbitraire qui est exposé en tant que membre de type abstrait. Si vous ne comprenez pas encore tous les mots ici, lisez plus here.

+0

Merci, je n'ai jamais pensé que c'était aussi simple. Aussi, merci de m'avoir informé sur le modèle Aux et je passerai aussi en revue votre lien fourni. :) –

+0

@RaKa Heureux d'aider, Miles est un homme incroyable que vous découvrirez, et il y a beaucoup d'autres personnes derrière Shapeless. – flavian