咳といいます。 かっこいいなぁ。 > 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')