2016-12-11 3 views
0

Ich habe eine Case-Klasse namens Quadrat und ich möchte auf eine Variable in ihm namens Seite zugreifen. Ich möchte dann die Mustererkennung verwenden, um zu erkennen, dass das Objekt vom Typ "Quadrat" und "Rückseite" * ist. Allerdings, wenn ich die unten laufen bekomme ich Wert Seite kein Mitglied dieses Objekts A $ A43.this.squareAuf Variablen in Case-Klassen zugreifen

case class square(side:Double) 

def getArea(o: Object): Double = { 
    o match { 
    case s: square => s.side*s.side 
    case _ => 0 
    } 
} 

Vielen Dank im Voraus für jede Beratung oder Unterstützung ist.

+0

Wahrscheinlich möchten Sie Ihre Fallklasse groß schreiben und 'case Square (s) => s * s' haben. Außerdem können Sie im Catch-All-Zweig nicht 'null' zurückgeben, da 'Double' ein Werttyp ist. – Alec

+0

@Alec Danke, dass dein Vorschlag perfekt funktioniert hat, ich hatte 0 in meinem Code Ich habe das gerade geschrieben, um ein Beispiel zu geben. Ich werde es jetzt aktualisieren und eine funktionierende Antwort hinzufügen. –

+0

"Ich möchte dann die Mustererkennung verwenden, um zu erkennen, dass das Objekt vom Typ" Quadrat "und" Rückseite "ist." Wenn Sie Objekt dann Mustererkennung akzeptieren, ist das ein bisschen wie ein Code-Geruch. Brauchst du das wirklich? –

Antwort

0

Das Problem, das ich hatte, wurde durch die Tatsache verursacht, dass ich eine nicht großgeschriebene Fallklassen verwendete. Um das oben genannte zu erreichen, müssten Sie folgendes tun.

case class Square(side:Double) 

def getArea(o: Object): Double = { 
    o match { 
    case Square(side) => side*side 
    //would also be valid case matching syntax 
    //case s: Square => s.side * s.side 
    case _ => 0 
    } 
} 
+0

Matching war in Ordnung, 'case s: Square => s.side * s.side' wäre auch gültig. Aber es ist einfacher zu verwenden, was Sie in diesem Beitrag haben. –

+0

@ Łukasz Danke für das Feedback, ich werde meine Antwort aktualisieren. –

Verwandte Themen