小宮と申します。

attrからmethod_addedがよばれた際に、メソッドキャッシュがクリアされてない
ような気がします。以下のコードを実行するとmethod_added内でNameErrorが発
生します。

ruby 1.6.1 (2000-09-27) [sparc-solaris2.5.1]で試しました。

class Foo
  def initialize() @foo = "foo" end
  def Foo.method_added(attr_name)
    Foo.new.foo                   # this will raise NameError
  end
end

Foo.new.respond_to? :foo          # cache absence of foo

begin
  Foo.module_eval{ attr :foo }
rescue NameError
  puts $!                         #=> undefined method `foo' for #<Foo:0xe7450>
end

p Foo.new.respond_to?(:foo)       #=> false

def foo() end                     # clear :foo from the cache

p Foo.new.respond_to?(:foo)       #=> true

----
小宮 健一
kom / mail1.accsnet.ne.jp