Scala ParArray模式匹配



考虑

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呢?

ParArray为平行结构。它的主要用途是并发地操作元素(参见文档)。这是通过并发地对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

相关内容

  • 没有找到相关文章

最新更新