2016-09-06 10 views
6

`ケースは '特定の状況のインスタンスです。発生するものの例は 'です。なぜcaseクラスの名前が 'case'ですか?

私の質問は、なぜScalaの 'case'クラスが 'case'として指定されたのですか?ポイントは?それはなぜ「ケース」であり、「データ」クラスではないのでしょうか?その場合、「ケース」を意味するもの:

+1

これは主に、_pattern matching_ expressionsのパターンとして使用できると思います。 'myVal match {case MyCaseClass(a、b)=> ...}'、各ケースクラスは別個の_case _... –

+0

誰にでも近いと投票した人に:私はこの質問が広すぎるとは思わない。 – pedrofurla

+0

明らかに、ケースクラスはスーツケースがスーツのコンテナである方法と同様に、データフィールドの単なるコンテナです。 –

答えて

8

他の言語でcaseキーワードの主な用途は、ほとんどのようなenum Sまたは同等の値に使用されているswitch -statementsでありますint Sまたは異なる、明確に定義されたケースを表すために使用されているstring S:Scalaで

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

これらのクラスは、多くの場合、抽象クラスの特定の明確に定義された可能なインスタンスを表すとほぼ同じ方法必須符号Uで使用されていますmatch -clauses内のSESスイッチ-文:ケースクラスの振る舞いの

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 
} 

多く、このような方法としては、彼らは、このような文での使用を有効/促進することを目的に構築することができます。

+0

Javaと似ているので、初めてJavaスイッチを正しく取得することが難しくなります。私は、キーワードが異なっていて、おそらく 'match'を再利用したいと思っています(彼らはメソッド名として人生を始めると言っています)。ケースは単なるパターンなので、 '{match p1 =>}'となります。おそらくそれは明白であり、またキーワードを保存するでしょう。なぜ彼らはそれをしなかったのですか? (NLを推測するのは難しいかもしれません、 '{match p1 => x matchなど}') –

1

パターンマッチングに使用できるからです。 A ケース英語の使用方法可能性の1つ;それがパターンマッチングがあなたのために働くものです。

例えば、「私たちはここに考慮しなければならない3つの場合があります。...」

+0

パターンマッチングでは動作しませんが、パターンマッチングで使用できます。ミドルの答えの最後の文ははるかに良い定式化です。 –