Сравнение шаблонов 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?

Заранее спасибо.

1 ответ

Решение

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 использовался.

Другие вопросы по тегам