I’ve problems understanding where to put type informations in scala, and how to put it. Here I create several sequences of Actors and I don’t type them. Even if I had to, I wouldn’t know which type of sequence map produces to give them the proper type.
Then later when the compiler yells at me because I’m trying to sum Anys, I’ve no idea where to begin filling in the gaps.
Here is my code, I tried to minimize it while still letting the necessary info available.
object Actors {
def main(args: Array[String]) {
val array = randomArray(5)
val master = new Master(array, 5)
master.start
}
def randomArray(length: Int): Array[Int] = {
val generator = new Random
new Array[Int](length) map((_:Int) => generator nextInt)
}
}
class Master(array: Array[Int], slavesNumber: Int) extends Actor {
def act () {
val slaves = (1 to slavesNumber).map(_ => new Slave)
slaves.foreach(s => s.start)
val futures = slaves.map(s => s !! Work(array))
val results = awaitAll(3000, futures:_*)
val res2 = results.flatMap(x => x)
println((0 /: res2)(_+_))
}
}
class Slave() extends Actor {
def act () {
Actor.loop {
receive {
case Work(slice) =>
reply((slice :\ 0)(_+_))
}
}
}
}
I’d appreciate too some good pointers towards comprehensive doc on the matter.
The object that are passed between actors are not typed, actors have to filter the object themselves — as you already do in the
Slaveactor. As you can see,!!is defined asso there is no type information in the returned
Future. Probably the easiest solution is to replace the linevar res2 ..withthis filters out just those
Someresults that are of typeInt.