From: SASADA Koichi Date: 2007-02-14T15:58:19+09:00 Subject: [ruby-dev:30332] Re: exception on Singleton  ささだです。  @_v をクラスローカルインスタンス変数にするという件を考えていたんです が、ファイルローカルなものにするというのはだめかなぁ、と思うようになりま した。つまり、現在の実装は suffix にクラス名を付ける(@_v -> @_v/C)よう な感じですが、suffix にファイル名をつける(@_v/t.rb)ようなイメージで す。ファイル名ではなく、ファイルコンパイル時に一意の値であれば問題ありま せん。  根拠は、まぁそのファイルを弄っている人は、どのクラスにどのインスタンス 変数が付いているかくらいは多分把握しているだろう(それに気づかずオーバー ライドすることは無いんじゃないかなぁ)、という予測です。  Singleton のような場合はこれで問題なくなり、また @__mutex__ のようなイ ンスタンス変数はファイル外で定義したコードからはアクセスできなくなります。  どうやっても他のファイルからはアクセス出来なくなるので、処理を挿入する ということがやりづらくなり、まずい気もします。  どうでしょうか。 SASADA Koichi wrote: >  ささだです. > > SASADA Koichi wrote: >>  このようなプログラムが動かなくなっているようです。多分、ivar2 関係で、 >> Singleton で使う @__mutex__ という変数が nil になっているので、その辺に >> 理由があるんじゃないかと思います。 > >  最初,この辺は ivar2 の実装がまずいのかな,と思ったんですが,ちょっと > よくわかりませんでした.なんとなく,意図した挙動になっているような気もし > ます. > >  実装が正しいとして,対処としては, > > 1. Singleton の実装を変える(@__mutex__ を @mutex__ にする,など) > 2. @_v でクラスローカルインスタンス変数とするのをやめる > > になるかと思います.どうしたもんでしょうか.1 の対処で動くことは確認しま > した. > >  個人的には,@_v のようなインスタンス変数は既に沢山あるので,@_v 以外の > 選択肢を模索する(たとえば,@.v や @v!,@v@ とか)のもありなのではないか > なと思うのですが,どうでしょうか.Matzにっきで散々繰り返された話題で,い > まさら反対意見言うなよ,ということなのかもしれませんが.個人的には @.v > がいいです.で,$.v がスレッドローカル変数.@v@と$v$の組もいいか. > -- // SASADA Koichi at atdot dot net