ちょっと現実的な例ではないのかもしれませんが,Foo.newしたとき,ブロック内でインスタンス変数@objを変更できないかなと考えています。こんなこと普通ではできないのかなと思いますが,ひょっとしてRubyの魔術を使えば可能なんでしょうか?
# -*- coding: utf-8 -*- class Foo def initialize @obj = true if block_given? yield end end end Foo.new { # ここで,@objをfalseにしたい }
追記(2011/04/16)
条件があいまいなので,追記しておきます。
- Fooクラスは,変更できない。
- ブロックが実行される前,もしくはブロック実行直後に@objはfalseにしておきたい。
追記(2011/04/23)
watson1978さんからアドバイスいただきました。