в Scala 2.8, когда я начинаю актеров, я могу общаться через передачу сообщений.Это, в свою очередь, означает, что я могу отправить окончательное сообщение Exit () или все, что я решу, в соответствии с моим протоколом.
Но как я буду проверять, вышел ли актер?Я легко могу представить себе задачу, когда главный актер запускает несколько рабочих актеров, а затем просто ждет ответов, каждый раз проверяя, был ли это окончательный ответ (т.е. все ли актеры все еще работают или они все ушли?).
Конечно, я могу позволить им всем отправить обратно сообщение "Я закончил", а затем сосчитать их, но это как-то неудовлетворительно.
Что является наилучшей практикой при тестировании на завершение работника?-actors?
РЕДАКТИРОВАТЬ # 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 внутри тела будущего.Это должно быть предметом, но я не получаю никаких ошибок с вышесказанным, он просто зависает.Кто-нибудь?
РЕДАКТИРОВАТЬ # 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())
}
}