2015-12-18 11 views
6

Angenommen, ich habe eine abgedichtetes Gehäuse Klassenhierarchie wie folgt aus:Abflachen eine abgedichtetes Gehäuse Klassenhierarchie

sealed trait Expr 
case class Const(val: Double) extends Expr 
case class Plus(x: Expr, y: Expr) extends Expr 
case class Times(x: Expr, y: Expr) extends Expr 
  • Ist es möglich, automatisch Ausdrücke zu konvertieren wie Plus(1,Plus(2,3)) in eine hList von HLists?
  • Funktioniert die Umwandlung sogar innerhalb einer Funktion f(e: Expr), d. H. Wenn die spezifische Struktur von e zur Kompilierungszeit nicht bekannt ist?
+0

'... wenn die spezifische Struktur von e zur Kompilierzeit nicht bekannt ist. Da' Expr' ein 'versiegeltes Merkmal' ist, kennt der Compiler alle Unterklassen zur Kompilierungszeit, z. Vollständigkeitsanpassung. Ich verstehe diesen Kommentar/meine Frage nicht - kannst du das bitte erklären? –

+0

Ich meine: von innen f, es ist nicht explizit bekannt, ob es mit f aufgerufen wurde (Plus (1, x)) oder f (Times (a, b)) - Ist dies ein Hindernis für die Abflachung der Ausdruck in eine HList von innen f? – NietzscheanAI

Antwort

0

Es stellt sich heraus, dass diese bereits auf SO here beantwortet wurden und dass ein entsprechendes example in der Shapeless Verteilung gibt es ab unförmig-2.1.0-SNAPSHOT.