Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

こんなことできますか?

ちょっと現実的な例ではないのかもしれませんが,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さんからアドバイスいただきました。