Hi All,
I am just going through the pickacxe book and have a question about
attr_reader. Here is the sample class.
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
It says I can do the following-
class Song
def name
@name
end
def artist
@artist
end
def duration
@duration
end
end
OR
I can do the following-
class Song
attr_reader :name, :artist, :duration
end
This is fine, but it says "The corresponding instance variables, @name,
@artist, and @duration, will be created automatically" (on Page 31) about
attr_reader. I kinda thought that those variables are already created when
"initialize" function is called. If I comment the initialize function and
run it - I get an error.
So what does the author mean by that?
Thanks in advance,
::akbar
Maybe this will help clarify:
class Foo
attr_reader :bar
def go_to_the_bar
@bar = 'anytime'
end
end
foo = Foo.new
p foo.bar
foo.go_to_the_bar
p foo.bar
There is no error, accessing the instance variable @bar, from the
reader (it has a value of nil) -- it is created on the fly. I am
guessing you commented out your initialize, but were still calling the
constructor with parameters?
pth
···
On 5/4/06, Akbar Pasha <akbarpasha@gmail.com> wrote:
Hi All,
I am just going through the pickacxe book and have a question about
attr_reader. Here is the sample class.
class Song
def initialize(name, artist, duration)
@name = name
@artist = artist
@duration = duration
end
end
It says I can do the following-
class Song
def name
@name
end
def artist
@artist
end
def duration
@duration
end
end
OR
I can do the following-
class Song
attr_reader :name, :artist, :duration
end
This is fine, but it says "The corresponding instance variables, @name,
@artist, and @duration, will be created automatically" (on Page 31) about
attr_reader. I kinda thought that those variables are already created when
"initialize" function is called. If I comment the initialize function and
run it - I get an error.
So what does the author mean by that?
Thanks in advance,
::akbar
Thanks Patrick. You were right about the constructor call. It was my
mistake. Now without it, it returns nil as you indicated.
::akbar
···
Maybe this will help clarify:
class Foo
attr_reader :bar
def go_to_the_bar
@bar = 'anytime'
end
end
foo = Foo.new
p foo.bar
foo.go_to_the_bar
p foo.bar
There is no error, accessing the instance variable @bar, from the
reader (it has a value of nil) -- it is created on the fly. I am
guessing you commented out your initialize, but were still calling the
constructor with parameters?
pth