咳といいます。

かっこいいなぁ。

> MailBox で考えるんなら素直に owner だけが読みだせる Queue を考えますね.
> 
>     require "thread"
>     
>     class MailBox
>       def iniaitlize(owner = Thread.current)
>         @owner = owner
>         @queue = Queue.new
>       end
>     
>       def push(obj)
>         @queue.push(obj)
>       end
>     
>       def pop
>         raise "permission denied." if Thread.current != @owner
>         @queue.pop
>       end
>     end
>     
>     MailBoxes = {}
>     
>     t1 = Thread.new { MailBoxes[Thread.current] = MailBox.new; .... }
>     # $m1 = MailBox.new(t1) ってな書き方もできる.だからどうしたという
>     # 話はある.
> 
> って感じで.

> # 継承するでもなく delegate.rb を使うでもないあたりがひねくれてる :-P

そうかなぁ。使わないおかげですっきりしてると思うけど。


> Global constant な MailBoxes が気に入らないなら Singleton で何かかぶせ
> る,かな.

MailBoxesのキーがスレッドならいっそスレッド変数(?)にもたせたら
どうでしょう?

   class MailBox
     def iniaitlize(owner = Thread.current)
       @owner = owner
       @queue = Queue.new
       Thread.current['mbox'] = self
     end
     ...
   end

t1['mbox'].push(mail)


まだ 本当にやりたかったこと が良くわかってないんですが、
こういうのでしょうか??

require 'thread'

class MailBox
  def initialize(&proc)
    @queue = Queue.new
    @thread = Thread.new do
      loop do
         proc.call(@queue.pop)
      end
    end    
  end

  def push(obj)
    @queue.push(obj)
  end
end

m1 = MailBox.new do |mail|
  puts mail
end

m1.push('hello')