Тип для параллельного или последовательного сбора в Scala - PullRequest
0 голосов
/ 10 мая 2018

У меня есть следующее значение:

val a = (1 to 10).toVector

И я хочу определить следующую функцию:

def sum1(a: ParOrSeqVector) = a.map(_+1)

, которая может работать с последовательным или параллельным вектором,

sum1(a)
sum1(a.par)

Как я могу это сделать?

Расширения от Scala API ParVector не дал мне никакой подсказки.

1 Ответ

0 голосов
/ 10 мая 2018

Есть 2 способа для этого

1) Объявить функцию, которая принимает параметр типа GenSeq

val a: Vector[Int] = (1 to 10).toVector
val a1: ParVector[Int] = ParVector.range(0, 10)

def sum2(a: GenSeq[Int]) = a.map(_+1)

sum2(a)
sum2(a1)

2) Принять функцию, которая принимает параметр Any, а затем выполнить сопоставление с образцом для него.

val a: Vector[Int] = (1 to 10).toVector
val a1: ParVector[Int] = ParVector.range(0, 10)

def sum1(a: Any) =
{
  a match {
    case x :Vector[Int] =>  x.map(_+1)
    case y :ParVector[Int] => y.map(_+1)
  }
}

sum1(a)
sum1(a1)

В обоих случаях вы получите вывод в формате

sum2: sum2[](val a: scala.collection.GenSeq[Int]) => scala.collection.GenSeq[Int]

res2: scala.collection.GenSeq[Int] = Vector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
res3: scala.collection.GenSeq[Int] = ParVector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

Надеюсь, это прояснит ваш вопрос. Пожалуйста, не стесняйтесь спрашивать, если у вас есть какие-либо сомнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...