Scala ParArray模式匹配

时间:2014-05-22 06:56:24

标签: scala pattern-matching parallel-collections

考虑

val b = ParArray("a","b","c")

但是,关于模式匹配b,例如如下,

b match {
  case ParArray(_,"b",_) => 2
  case _ => -1
}


<console>:11: error: object ParArray is not a case class, 
                     nor does it have an unapply/unapplySeq member
              case ParArray(_,"b",_) => 2

那么如何模式匹配ParArray

先谢谢。

1 个答案:

答案 0 :(得分:3)

ParArray是一个并行结构。它的主要用途是同时对元素进行操作(参见docs)。通过在ParArray的仲裁段上同时应用操作来完成(粗略地说)。

为了反例,假设您可以在ParArray上取消应用。比赛怎么样:

Given val b = ParArray("a","b","c","d")

b match {
  case ParArray(_,"b",_) => 2
  case _ => -1
}

Could be arbitrarily converted into:
//Parallel split & join:
"a","b" match {
  case ParArray(_,"b",_) => 2
  case _ => -1
}

"c","d" match {
  case ParArray(_,"b",_) => 2
  case _ => -1
}

当然,这没有任何意义。 对于您问题的具体情况,您可以使用直接寻址:

if (b.size == 3 && b(1)=="b") 2 else -1

从更一般的意义上讲,一种好的推理方式是考虑如何将操作同时应用于所有元素。

如果您需要match结构,则可以使用parArray.toArray方法获取数组。您还应该质疑为什么ParArray被使用。