Actor 版 Generator 修正版

Actor 版 Generator を修正したので gist に上げた

変更点は

  • hasNext を呼びまくってもいい
  • Generator.gen を使えば継続版と同じ感じで書ける
  • Generator 用メッセージを識別してみた

といったところ。

でも使用はオススメしない

2010/01/21 修正

フィボナッチ

比較用にフィボナッチ数を計算するサンプルも書いてはみたものの、 sleep が入っているので actor で動かしている方のスレッドからメッセージが送られまくって色々大変なことになるのではないか…。
無限長の generator を作るときは使わない方がいいかも。

import net.shomah4a.utils.generator.actor
import net.shomah4a.utils.generator.actor.Generator.{gen}


def main()
{
  for (v <- gen[Int] {(x) =>
    {
      x ! 1
      x ! 1

      def fib(n: Int, m: Int): Unit =
        {
          x ! (n + m)
          fib(m, n+m)
        }

      fib(1, 1)
    }})
    {
      println(v)
      Thread.sleep(100)
    }
}

main()