@m_seki の

I like ruby tooから引っ越し

Actorの習作。

ちょっとやってみた。呼び出しが直列化されるところがミソなら、こんな感じかなあ。

class ActorsOffice
  def initialize(actor)
    @queue = Queue.new
    @thread = Thread.new(actor) do
      catch(actor) do
        while true
          msg, arg, blk = @queue.pop
          actor.__send__(msg, *arg, &blk)
        end
      end
    end
  end
  def __thread__; @thread; end

  def method_missing(m, *a, &b)
    @queue.push([m, a, b])
  end
end

使用例つきは以下の通り。