From: Takaaki Tateishi Date: 2002-07-20T22:19:19+09:00 Subject: [ruby-dev:17731] Re: self in block At Sat, 20 Jul 2002 21:27:58 +0900, > > ばれる場合なんですよね。つまりブロックを作ったところからはあず > > かり知らぬオブジェクトが caller であるということです。このとき > > これは全然違います。 > > Sequence.new(){... } > の場合 object が Sequence の instance であることははっきりしています。 > 不定なのは、この文が置かれる場所の context です。 > これは object 自身にとっては不必要な情報です。 > 私の提案はこの不必要な情報の隠蔽が目的です。 なんとなく分かってきました. 結局,再帰的な定義を行う場合のことですね.それこそ,selfはあまりも 意味的に外れていると思います.selfは実体化したものを表すために使って いるので,これから定義しようとするもの自身を差すわけではないです. GUIのコールバックを定義するときに思ったことがあるのですが,コールバッ ク自体を再帰的に定義する直接的な方法がとれないことをどうにかできないか と考えたことがあります. def set_callback @callback = proc{ yield } end def rec_func(data) if( data > 0 ) rec_func(data - 1) end end set_callback(){|widget,data| rec_func(data) } もちろん,widget.callbackなどを使えば大抵のGUIツールキットではできる のですが,widgetがないときはどうするのかと考えると… rec_funcは再帰的なメソッドなのですが,この再帰的なメソッドを使わずに うまく再帰をブロック内だけで済ますことはできないかと考えたことがあり ます. yield()のような,現在のブロック自身を呼び出すような関数があっても良 いのではないかと考えています. set_callback(){|widget,data| if( data > 0 ) call_current_block(widget,data-1) end } -- Takaaki Tateishi