2016-09-06 113 views
6

`案例是'一個特定情況的實例;一個發生在'的事例。爲什麼case class被命名爲'case'?

所以我的問題是 - 爲什麼Scala'case'類被命名爲'case'?有什麼意義?爲什麼它是'案例',而不是'數據'類或其他什麼?在這種情況下,什麼意思是'case':)

+1

我想主要是因爲它們可以用作_pattern matching_表達式中的模式,例如, 'myVal match {case MyCaseClass(a,b)=> ...}',其中每個case類是一個單獨的_case _... –

+0

誰投誰的結論:我不認爲這個問題太寬泛。 – pedrofurla

+0

顯然,case類只是一個數據字段的容器,手提箱是一個套裝的容器。 –

回答

8

在其他語言中的主要使用case關鍵字是在其上enum S或如可比值大多采用switch -statements被用於表示不同的明確定義的情況下int S或string S:

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

Scala中這些類常常表示一個抽象類的具體定義明確的可能實例和在大致相同的方式的命令性代碼被用於ù內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可能會很棘手,例如{匹配p1 => x匹配等)。) –

1

這是因爲它們可以用於模式匹配。 A 案例英文使用方式其中一種可能性;這就是你的模式匹配。

例如,「有三種情況下,我們必須考慮在這裏......」

+0

它們不通過模式匹配「工作」,但可用於模式匹配。 midor的答案的最後一句話是一個更好的表述。 –