[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Where is attr_accessor located?

Mariano Kamp

11/12/2006 6:16:00 PM

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

2 Answers

Ross Bamford

11/12/2006 6:45:00 PM

0

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.
>

It's because:

Kernel.is_a?(Module)
# =3D> true

and the attr* methods are instance methods on Module.

-- =

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

Mauricio Fernández

11/12/2006 11:24:00 PM

0

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?

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


--
Mauricio Fernandez - http://eige... - singular Ruby