什么这个scala符号 - > _表示

igx*_*igx 14 scala

有人可以帮我理解这段代码

case "Foo" Foo(data) -> _ => { /*.. implementation */}
Run Code Online (Sandbox Code Playgroud)

我看到了Foo.unapply(数据)的用法,但我不明白这部分是什么

- > _

如何以及何时使用它

Tra*_*own 27

它看起来像有人是这样对自己好太聪明了.假设我有以下内容:

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

object -> { def unapply[A, B](p: (A, B)) = Some(p) }
Run Code Online (Sandbox Code Playgroud)

现在我可以这样写:

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

感谢Scala中缀模式的神奇之处,这相当于以下内容:

Foo("foo", (42, 'whatever)) match {
  case Foo("foo", data -> _) => data
}
Run Code Online (Sandbox Code Playgroud)

除了中缀版本保证混淆和惹恼您的代码的未来读者.

  • @RexKerr:括号实际上并没有在这里做任何工作 - 你也可以(即可怕地)写`case'foo"Foo data - > _`. (2认同)
  • 哦,哦,当然.将'Foo(...)`解释为最高优先级而不是parens作为`data`的无用包装器是诱人的. (2认同)