в Scala 2.8, когда я запускаю акторов, общаться посредством передачи сообщений. Это, в свою очередь, означает, что я могу отправить окончательное сообщение Exit () или все, что я решу, подходит для моего протокола.
Но как я могу проверить, вышел ли актор? Я легко могу представить себе задачу, в которой главный актер запускает несколько рабочих акторов, а затем просто ждет ответов, каждый раз проверяя, был ли это окончательный ответ (т.е. работают ли какие-либо актеры или все вышли?)
Конечно, я могу позволить им всем отправить сообщение «Я готов», а затем пересчитать их, но это почему-то неудовлетворительно.
Каковы лучшие практики при тестировании завершения рабочих-актеров?
РЕДАКТИРОВАТЬ №1
Привет, ребята, я смотрю в будущее, но у меня проблемы. Может кто-нибудь объяснить, почему этот код не работает:
package test
import scala.actors.Futures._
object FibFut extends Application{
def fib(i:Int):Int =
if(i<2)
1
else
fib(i-1)+fib(i-2)
val f = future{ fib(3) }
println(f())
}
Он работает, если я определяю функцию fib внутри тела future-body. Это должно быть что-то из области видимости, но я не получаю никаких ошибок с указанным выше, он просто зависает. Кто-нибудь?
РЕДАКТИРОВАТЬ # 2
Кажется, расширение приложения - не лучший вариант. Определение основного метода заставило все работать. Приведенный ниже код - это то, что я искал, поэтому Futures заслуживают внимания :)
package test
import scala.actors.Futures._
object FibFut {
def fib(i: Int): Int = if (i < 2) 1 else fib(i - 1) + fib(i - 2)
def main(args: Array[String]) {
val fibs = for (i <- 0 to 50) yield future { fib(i) }
for (future <- fibs) println(future())
}
}