【问题标题】:Scala ParArray pattern matchingScala ParArray 模式匹配
【发布时间】:2014-05-23 06:14:11
【问题描述】:

考虑

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 上没有定义 unapply。一种解决方法是使用b.toList match { case List(_, "b", _) =&gt; ...}

标签: scala pattern-matching parallel-collections


【解决方案1】:

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 &amp;&amp; b(1)=="b") 2 else -1

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

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

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 2016-05-17
    • 2021-12-17
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2015-10-07
    相关资源
    最近更新 更多