From: "NAKAMURA, Hiroshi" Date: 2010-07-30T18:12:24+09:00 Subject: [ruby-dev:41904] Re: thread.bind(sym, val) { ... } 2010/7/30 Tanaka Akira : >> 多いんですか。個人的にはスレッド変数はスレッドスコープのグロー >> バル変数としてだけ使い、スコープのあるような使い方の経験はな >> いんですが。 > > うぅむ、調べ直してみると、たしかにそんなに多くないのかもしれません。 一応、そういう使い方の例を。 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/soap/mapping/mapping.rb?view=markup の、下のほうにあるprotect_threadvarsが定義で、上のほうに利用例がありま す。obj2soap、soap2obj共に再帰するので、スコープを作ります。 > pp (や inspect) では、スレッド変数それ自体は一回設定したら変えませんね。 > 変更・回復は設定したハッシュの中身に対して行うので、 Threadインスタンスが使い捨てのことが多く、グローバル変数的に使っても気に ならない、ということはあるかもしれません。再帰せず、名前衝突が無ければ意 味ないし。 > それは Thread#bind で > 対応するものではなさそうです。 Hash的なものへの代入でスコープのような使い方、と汎用化すればよい? let(Thread.current, :sym => var) {} とか。