2017-03-15 2 views
1

finden Ich kann Shapeless.Generic mit skalierten parametrisierten Funktionen nicht implementieren. Im folgenden Codeabschnitt erhalte ich den Fehler "konnte keinen impliziten Wert für den Parameter gen: shapeless.Generic [T]" finden.Scala-Typ-Parametrisierung, Shapeless - konnte keinen impliziten Wert für den Parameter Generic

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) 

Gibt es etwas, das ich vermisse?

Antwort

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) 

Sie müssen in der Regel die Aux Muster verwenden, Generika sind Makro materialisiert aber eine beliebige Art erzeugen, die als eine abstrakte Art Mitglied ausgesetzt wird. Wenn Sie alle Wörter hier noch nicht verstehen, lesen Sie mehr here.

+0

Danke, ich hätte nie gedacht, dass es so einfach ist. Danke, dass du mich über das Aux-Muster informiert hast und ich werde auch deinen angegebenen Link durchgehen. :) –

+0

@RaKa Glücklich zu helfen, Miles ist ein erstaunlicher Mann, wie Sie entdecken werden, und so sind viele andere Leute hinter formlos. – flavian

Verwandte Themen