2013-08-28 5 views
13

誰かがこのコード私はFoo.unapply(データ)の使用を参照してくださいこのScalaのシンボル何 - > _が

case "Foo" Foo(data) -> _ => { /*.. implementation */} 

に理解する私を助けることができますが、私は理解していない何を意味するのか、この部分

- > _

いつ、どのように

+0

あなたの問題をカバーする人気のある質問があります。http://www.stackoverflow.com/questions/7888944/scala-punctuation-aka-symbols-and-operators –

+1

btw intellij http: //gyazo.com/dcf31d20ccb925bed0e302fd45df7710.png、またはスカラX線で処理する場合http://scastie.org/2026 – OlegYch

答えて

26

これ見よ、それを使用する方法誰かのようなオークはの方法であるあまりにも自分の利益のために賢いです。私は、次のを持っていると仮定します。

case class Foo[A](command: String, data: A) 

object -> { def unapply[A, B](p: (A, B)) = Some(p) } 

今、私はこの書くことができます:Scalaの中置パターンの魔法に

scala> Foo("foo", (42, 'whatever)) match { 
    | case "foo" Foo(data) -> _ => data 
    | } 
res0: Int = 42 

おかげで、これは以下と等価です:

Foo("foo", (42, 'whatever)) match { 
    case Foo("foo", data -> _) => data 
} 

埋め込みバージョンは、コードの将来の読者を混乱させ、迷惑をかけることが保証されています。

+1

+1これはすぐに判明したためです。そしてスカラーの魔法のために –

+1

うわー。私は、コンパイラが括弧の中で ' - > _ 'を動かすことができるということを本質的に知っていませんでしたか?それとも、何が起こっているのではないですか? –

+2

@RexKerr:カッコは実際には何もしません。恐らく 'case" foo "Foo data - > _"と書くこともできます。 –

関連する問題