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

It's because:

Kernel.is_a?(Module)
# => true

and the attr* methods are instance methods on Module.

···

On Sun, 12 Nov 2006 18:15:48 -0000, Mariano Kamp <mariano.kamp@acm.org> wrote:

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

--
Ross Bamford - rosco@roscopeco.remove.co.uk

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 Nov 12, 2006, at 8:00 PM, Ross Bamford 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.

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 Mon, Nov 13, 2006 at 06:16:05AM +0900, Mariano Kamp wrote:

On Nov 12, 2006, at 8:00 PM, Ross Bamford 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?

--
Mauricio Fernandez - http://eigenclass.org - singular Ruby

Thanks, that was what I was looking for ... Stupid of me :wink:

···

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

Module.private_instance_methods(false).include? "attr_reader" # => true