From: Patrick Hurley Date: 2006-05-04T23:05:50+09:00 Subject: Re: A question about attr_reader On 5/4/06, Akbar Pasha 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 > > 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