Where is attr_accessor located?

Hi,

I am a bit confused. I get different responses when asking RI and
IRB. It’s probably just me not understanding to read the output or
issue the right queries.

When calling “ri attr_accesor” I get the following:

localhost:~ mkamp$ ri attr_accessor
--------------------------------------------------- Module#attr_accessor
attr_accessor(symbol, …) => nil

  Equivalent to calling ``+attr+_symbol_+, true+'' on each _symbol_
  in turn.

     module Mod
       attr_accessor(:one, :two)
     end
     Mod.instance_methods.sort   #=> ["one", "one=", "two", "two="]

That would mean attr_accesor is in Module right?

Please look at this IRB session:

localhost:~ mkamp$ irb

Module.private_methods.grep /attr/
=> [“attr”, “attr_reader”, “attr_writer”, “attr_accessor”]

Module.private_methods(false).grep /attr/
=> []

Kernel.private_methods(false).grep /attr/
=> [“attr”, “attr_reader”, “attr_writer”, “attr_accessor”]

Why is that? After looking at the rdoc documentation I would have
assumed that attr_accessor would be a private method of Module, not
of Kernel.

Any idea?

Cheers,
Mariano

On Sun, 12 Nov 2006 18:15:48 -0000, Mariano K. [email protected]
wrote:

After looking at the rdoc documentation I would have assumed that
attr_accessor would be a private method of Module, not of Kernel.

It’s because:

Kernel.is_a?(Module)

=> true

and the attr* methods are instance methods on Module.

On Nov 12, 2006, at 8:00 PM, Ross B. wrote:

After looking at the rdoc documentation I would have assumed that
attr_accessor would be a private method of Module, not of Kernel.

It’s because:

Kernel.is_a?(Module)

=> true

and the attr* methods are instance methods on Module.

Yes, I believe I understood that. It is “used” there.
Maybe that is what I don’t get … Why doesn’t the method show up in
Module?

Cheers,
Mariano

On Mon, Nov 13, 2006 at 06:16:05AM +0900, Mariano K. wrote:

and the attr* methods are instance methods on Module.

Yes, I believe I understood that. It is “used” there.
Maybe that is what I don’t get … Why doesn’t the method show up in
Module?

Module.is_a? Class # => true
Class.private_instance_methods(false).include? “attr_reader” # =>
false
Kernel.is_a? Module # => true
Module.private_instance_methods(false).include? “attr_reader” # => true

On Nov 13, 2006, at 12:24 AM, Mauricio F. wrote:

Module.private_instance_methods(false).include? “attr_reader” # =>
true
Thanks, that was what I was looking for … Stupid of me :wink: