can someone explain how attr_reader works?
i can't find a good explanation anywhere.
please help!
can someone explain how attr_reader works?
i can't find a good explanation anywhere.
please help!
can someone explain how attr_reader works?
i can't find a good explanation anywhere.
please help!
It's built in to the language, so it 'works' by magic for all
practical purposes, it's implemented in `object.c` if you want to take
a look at the implementation. If you wanted to implement it in Ruby,
you do something like this:
def new_attr_reader cl, sym
str = "def #{sym.to_s}; @#{sym.to_s}; end"
cl.class_eval str
end
class Test; end
new_attr_reader Test, :my_new_reader
Test.new().my_new_reader
The built in `attr_reader` takes an array of sym's, but you get the idea.
-tim
On 3/3/07, libsfan01 <mcyi2mr3@googlemail.com> wrote:
libsfan01 wrote:
can someone explain how attr_reader works?
i can't find a good explanation anywhere.
please help!
attr_reader, in it's common usage, creates instance variables and defines a method by which you can read them.
Class Test
def initialize(num)
@test=num
end
def test
@test
end
end
If you were to use attr_reader instead, your class definition would be
Class Test
attr_reader :test
def initialize(num)
@test = num
end
end
Alle sabato 3 marzo 2007, Raj Sahae ha scritto:
attr_reader, in it's common usage, creates instance variables and
defines a method by which you can read them.
Actually, attr_reader doesn't create the variable, just the accessor method.
To see this, do the following in irb:
class C
attr_reader :var
def var_defined?
defined?(@var)
end
end
=> nil
c=C.new
=> #<C:0xb7a4c650>
c.var_defined?
=> nil
class C
def initialize
@var=nil
end
end
=> nil
c1=C.new
=> #<C:0xb7cf1a04 @var=nil>
c1.var_defined?
=> "instance-variable"
As you can see, in the first case (the variable called c) doesn't have the
@var instance variable defined. Even after you call the var method defined
using attr_reader, the variable is still not defined. To define it, you need
to explicitly assign it to a value (using @var= something inside an instance
method of the class or using instance_variable_set)
Stefano
> can someone explain how attr_reader works?
> i can't find a good explanation anywhere.
It's built in to the language, so it 'works' by magic for all
practical purposes, it's implemented in `object.c` if you want to take
a look at the implementation. If you wanted to implement it in Ruby,
you do something like this:
Actually, that's not true. It's written in C, but that's not the same
as being built into the language. It's a method on Module, so it *can*
be overridden.
class Module
alias old_attr_reader attr_reader
def attr_reader(*names)
puts "Making attribute readers for #{names.join(", ")}"
old_attr_reader *names
end
end
=> nil
class Foo
attr_reader :bar
attr_reader :baz, :quux
end
Making attribute readers for bar
Making attribute readers for baz, quux
-austin
On 3/3/07, Tim Becker <a2800276@gmail.com> wrote:
On 3/3/07, libsfan01 <mcyi2mr3@googlemail.com> wrote:
--
Austin Ziegler * halostatue@gmail.com * http://www.halostatue.ca/
* austin@halostatue.ca * You are in a maze of twisty little passages, all alike. // halo • statue
* austin@zieglers.ca
attr* also cheats, so methods defined by attr* are slightly faster than methods defined with def:
http://blog.segment7.net/articles/2006/03/06/attr-vs-method-vs-define_method
On Mar 3, 2007, at 15:25, Austin Ziegler wrote:
On 3/3/07, Tim Becker <a2800276@gmail.com> wrote:
On 3/3/07, libsfan01 <mcyi2mr3@googlemail.com> wrote:
> can someone explain how attr_reader works?
> i can't find a good explanation anywhere.
It's built in to the language, so it 'works' by magic for all
practical purposes, it's implemented in `object.c` if you want to take
a look at the implementation. If you wanted to implement it in Ruby,
you do something like this:Actually, that's not true. It's written in C, but that's not the same
as being built into the language. It's a method on Module, so it *can*
be overridden.