2016-10-16 6 views
2

I diesem Fall Klassen und Funktionen in scala erstellt haben:Scala: Fallklassen und Pattern-Matching

abstract class Building[T] 
case class University[T](a: Building[T], b: Building[T], c: T) extends Building 

def u[A,B](a: Building[A]): Building[B] = a match { 
    case n: University[A] => University[B](n.a, n.b, n.c); 
} 

aber es dies sagt beim Kompilieren:

[Fehler] test.scala: 357: Typ Mismatch; [Fehler] gefunden: test.abc.def.University [B] [Fehler] erforderlich: test.abc.def.Building [B]

Was mache ich falsch? nur

Antwort

1

University muss Building[T] erstreckt sich nicht Building

case class University[T](a: Building[T], b: Building[T], c: T) extends Building[T] 

Dies ist die komplette Code

abstract class Building[T] 
case class University[T](a: Building[T], b: Building[T], c: T) extends Building[T] 

In u Funktion Ausgangstyp ist Building[B]. Sie geben University[B] zurück Aber University[B] dauert eine, die Building[B] b ist, die wieder Building[B] und c ist, die B ist.

n.a kehrt Building[A] nicht Building[B] um University[B] nimmt zwei Building[B] und ein B. Sie können n.a, n.b und n.c nicht übergeben, um university[B] zu erstellen.

Um den Code zu Kompilierung machen Ich habe den Ausgabetyp geändert und wiederkehr University[B]

def u[A,B](a: Building[A]): Building[A] = a match { 
    case n: University[A] => University[A](n.a, n.b, n.c); 
} 

Korrekter Code

abstract class Building[T] 

case class University[T](a: Building[T], b: Building[T], c: T) extends Building[T] 

def convert[A, B](a: A): B = ??? 

def bConvert[A, B](building: Building[A]): Building[B] = ??? 

def u[A,B](a: Building[A]): Building[B] = a match { 
    case n: University[A] => University[B](bConvert(n.a), bConvert(n.b), convert(n.c)); 
} 
Verwandte Themen