2016-09-06 14 views
6

`Case is 'eine Instanz einer bestimmten Situation; ein Beispiel für etwas vorkommendes '.Warum Fall Klasse heißt "Fall"?

Also meine Frage ist - warum Scala "Fall" -Klassen als "Fall" benannt werden? Was ist der Sinn? Warum ist es "Fall", nicht "Daten" -Klasse oder etwas anderes? Was bedeutet "Fall" in diesem .. Fall :)

+1

Ich denke hauptsächlich, weil sie als Muster in _pattern matching_ Ausdrücke, z.B. 'myVal match {Fall MyCaseClass (a, b) => ...}', wobei jede Fallklasse ein separater _case _... ist. –

+0

An wen auch immer gestimmt hat: Ich denke nicht, dass diese Frage zu weit gefasst ist. – pedrofurla

+0

Offensichtlich ist eine Fallklasse nur ein Container von Datenfeldern, so wie ein Koffer ein Container von Anzügen ist. –

Antwort

8

Die primäre Verwendung des case Schlüsselwort in anderen Sprachen in switch -Aussagen, die auf enum s oder vergleichbaren Werten meist verwendet werden, wie zum Beispiel int s oder string s verwendet werden, verschiedene wohldefinierte Fälle darstellen:

switch (value) 
{ 
    case 1: // do x - 
    case 2: // do y - 
    default: // optional 
} 

in scala diese Klassen oft die spezifischen gut definierten möglichen Instanzen einer abstrakten Klasse dar und werden in der gleichen Art und Weise zwingend notwendig, Code verwendet u ses switch-Anweisungen innerhalb match -clauses:

value match { 
    case Expr(lhs, rhs) => // do x 
    case Atomic(a) => // do y 
    case _ => // optional, but will throw exception if something cannot be matched whereas switch won't 
} 

Ein Großteil des Verhaltens der Fallklassen wie die Art und Weise können sie Ziele in solchen Aussagen zu erleichtern/ermöglichen ihre Verwendung konstruiert werden.

+0

Die Ähnlichkeit zu Java macht es mir schwer, jetzt einen Java-Switch gleich beim ersten Mal richtig zu machen. Ich wünschte, das Keyword wäre anders, vielleicht wiederverwendet 'match' (was sie sagen Leben als Methodenname gestartet). Da die Fälle nur Muster sind, {p1 =>}. Möglicherweise wäre das eindeutig und speichere auch ein Stichwort. Warum haben sie das nicht gemacht? (Inferring NL könnte schwierig sein, '{match p1 => x match etc}'.) –

1

Es ist, weil sie für die Mustererkennung verwendet werden können. A Fall in englischer Sprache bedeutet eine der Möglichkeiten; und das ist der Mustervergleich, der für dich funktioniert.

zB „Es gibt drei Fälle, die wir hier betrachten müssen ...“

+0

Sie funktionieren nicht über Mustervergleich, können aber im Mustervergleich verwendet werden. Der letzte Satz von Midors Antwort ist eine viel bessere Formulierung. –