[#17615] substitution at when-clause — Takaaki Tateishi <ttate@...>
立石です.
まつもと ゆきひろです
At Tue, 2 Jul 2002 02:54:01 +0900,
まつもと ゆきひろです
At Tue, 2 Jul 2002 13:30:17 +0900,
まつもと ゆきひろです
立石です.
まつもと ゆきひろです
青山です。
立石です.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
At Wed, 3 Jul 2002 17:48:58 +0900,
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[#17625] Re: Getting CGI arguments as scalars — Wakou Aoyama <wakou@...>
青山です。
[#17662] update irb to cvs repository — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
In article <200207041003.TAA06746.keiju@ishitsuka.com>,
けいじゅ@日本ラショナルソフトウェアです.
[#17676] generation GC — Minero Aoki <aamine@...>
あおきです。
[#17706] self in block — masaki <GEC01122@...>
[#17714] Re: self in block — masaki <GEC01122@...>
[#17722] Re: self in block — masaki <GEC01122@...>
[#17725] Re: self in block — masaki <GEC01122@...>
まつもと ゆきひろです
In article <1027176584.577546.14709.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
At Sun, 21 Jul 2002 01:10:02 +0900,
まつもと ゆきひろです
[#17730] Re: self in block — masaki <GEC01122@...>
At Sat, 20 Jul 2002 21:27:58 +0900,
高橋征義です。
けいじゅ@日本ラショナルソフトウェアです.
[#17764] Re: self in block — masaki <GEC01122@...>
まつもと ゆきひろです
In article <1027383423.558649.31176.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1027404202.545188.1283.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1027406979.880878.1358.nullmailer@picachu.netlab.jp>,
まつもと ゆきひろです
In article <1027409151.187595.1406.nullmailer@picachu.netlab.jp>,
前田です。
In article <87bs8xkfqr.wl@studly.priv.netlab.jp>,
前田です。
[#17774] Re: self in block — masaki <GEC01122@...>
[#17832] Re: [ruby-cvs] ruby: * random.c: replace with Mersenne Twister RNG. — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
[#17840] Re: new mathn [Re: Rational#to_int ← String#center] — keiju@... (石塚圭樹)
けいじゅ@日本ラショナルソフトウェアです.
[#17851] undef_method ? — Shin-ichiro HARA <sinara@...>
原です。
[#17855] non-blocking IO — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
[#17867] parenthesize argument(s) for future version — Koji Arai <JCA02266@...>
新井です。
まつもと ゆきひろです
[ruby-dev:17779] Re: self in block
どうも、初めての発言です。西啓一朗@Ktouth Brand. です。
この議論、興味深く読ませてもらってましたが、ちょっと気になったので質問さ
せてください。
class Sample
def initialize(&block)
@proc = block
end
end
obj = Sample.new {<n> n==0 ? 1:n*self[n-1]}
func = Proc.new {<n> n==0 ? 1:n*self[n-1]}
obj2 = Sample.new &func
obj3 = Sample.new &func
まず、上のコード例でのブロックの実際の処理ですが....
(0. 実行前に構文木にコンパイルされている)
1. ブロック指定子「{」にさしかかる(=ブロック部分の構文木を参照する)と、
Procクラスのインスタンスの生成が行われる。
1a. このインスタンスには「ブロック部分の構文木への参照」と「ブロックで必
要になるブロック外のオブジェクトへの参照」が保持されている。
1b. この参照の中には、コード内に出てきたselfに対応するオブジェクトの参照
も含む。(メソッド呼び出しやインスタンス変数参照にも必要なので)
2. 生成したProcクラスのインスタンスを引数としてSample.newが呼ばれる。
....という理解で合っていますでしょうか?
合ってないなら、この質問は聞き流してください^^;
で、正木さんのselfすげ替え案で実装されたと仮定したとき、Procインスタンス
のselfに対応するオブジェクトを差し替えることになるわけだから、Procの中で
もSampleインスタンスが参照されているために循環参照が発生し、ガベージでき
ないオブジェクトになっちゃいませんか?
この推測が間違ってないなら、メモリリークに相当するバグになる気がします。
対して、ProcクラスのインスタンスのProc#callを呼び出している間だけ、selfすげ替えが
機能するのなら、デフォルトですげ替えるのではなく、もっと単純に
Proc#call_by(obj, *prm)
のようなメソッドが追加されれば十分な気がしますが……どうでしょう?
--
西 啓一朗 <ktouth@k-brand.gr.jp>