Сравнение шаблонов 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
использовался.