0
如果有人能用簡單的英語解釋這種行爲,我會非常感激。具體來說,case _:Foo
和case Foo()
之間有什麼區別?案件類別匹配
myvariable match {
case _: Foo => println("its a foo!")
case Foo() => println("It's also a Foo")
case Foo => println("Oops, this will *not* match a Foo! It will never be called")
case _ => println("This will be called for all unmatched items")
}
唉唉我現在明白了,'情況美孚()'實際上是調用'Foo.unapply',但因爲它是一個空的參數列表沒有任何提取。我知道第三個案例有點奇怪,但我認爲這是一個常見的錯誤,所以我想把它作爲一個「哎呀」,用於閱讀 – Hamy 2014-09-20 18:06:44
@Hamy第三個案例根本不奇怪 - 當你想要時你會這樣做匹配*值*,而不是結構。因此,如果你有一個「密封特質」的情況,就像johanandren所暗示的那樣,它沒有攜帶任何數據,你可以將它作爲一個「case object」並且以這種方式匹配。你也可以通過這種方式來匹配文字值。還有另一種類型的案例,它使用反引號來匹配先前定義的變量。 – acjay 2014-09-21 00:37:25
@acjay - 當然,所有偉大的建議。也許奇怪的是錯誤的詞,我的意思是我認爲人們經常會把'case Foo'和'case Foo()'混淆起來,沒有意識到前者可能沒有按照他們的意圖去做。例如,請參閱http://stackoverflow.com/questions/2254710/why-were-the-case-classes-without-a-parameter-list-deprecated第一個答案提到這種混淆 – Hamy 2014-09-21 01:27:00