Scala Pattern匹配列表,带有`@`符号和提取器

时间:2016-01-11 18:59:44

标签: scala pattern-matching

我想访问第一个元素的引用

List(Some(1), None) match {
  case x@Some(1) :: xs => x
  case _ => None
}
res0: java.io.Serializable = List(Some(1), None)

模式匹配正确。

但我希望xSome(1),即列表的头部, NOT 列表本身。

我如何使用提取器 AND 引用该元素?

1 个答案:

答案 0 :(得分:1)

我只是将元素包装在括号中

val lst = List(Option(1), None)
lst match {
  case (x@Some(1)) :: xs => x
  case _ => None
}
res0: Option[Int] = Some(1)

它也适用于多个提取器!

val lst = List(Option(1),Option(2), None)
lst match {
  case (x@Some(1)) :: (y@Some(2)) :: xs => y 
  case _ => None
}