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 
···
On Nov 13, 2006, at 12:24 AM, Mauricio Fernandez wrote:
Module.private_instance_methods(false).include? "attr_reader" # => true