It's true that attr_reader gives you the ability to
do:

puts mySong.name

...but it doesn't let you initialize all of these
attributes during construction.

Additionally, if you want to *write* to an attribute,
you need attr_writer (or attr_accessor, which provides
both read and write capability).

So, even if you had writers and readers, you would
still have to call each one separately to initialize
all of the values.  

later,
Chad

--- Erik Meade <emeade / geekfarm.org> wrote:
> Armin,
> 
> Thanks, that does fix my error, but I was sort of
> under the impression
> that attr_reader did that for you in the pick axe
> book I see:
> 
> class Song 
>   attr_reader :name, :artist, :duration 
> end 
> aSong = Song.new("Bicylops", "Fleck", 260) 
> 
> but entering this into irb shows me it is incorrect.
>  Thanks for
> solution!
> 
> Erik
> 
> > -----Original Message-----
> > From: Armin Roehrl [mailto:armin / approximity.com]
> > Sent: Saturday, November 03, 2001 3:35 PM
> > To: ruby-talk ML
> > Subject: [ruby-talk:24292] Re: Newbie wrong # of
> arguments(4 for 0)
> > question
> > 
> > 
> > Hi,
> > 
> > 	what about adding  initialize to Revision?
> > --
> > class Revision
> >   attr_reader :revision, :date, :name, :log
> >   def initialize(revision,date,name,log)
> >    
> @revision,@date,@name,@log=revision,date,name,log 
> >   end
> > end
> > ---
> > 
> > Bye,
> > 	Armin
> > 
> > On Saturday 03 November 2001 22:17, you wrote:
> > > Well I've finally found an excuse to write some
> ruby, and I 
> > haven't made it
> > > far before
> > > I've gotten myself stuck.  I remember a joke
> about the 
> > arguments error from
> > > Ruby Conf,
> > > but can't remember the punch line :(
> > >
> > > I'm sure I am making some simple little mistake,
> but I have no 
> > pair so I am
> > > at a loss.
> > > If anyone can offer assistance I would be most
> appreciative.
> > >
> > > --
> > > Erik Meade             emeade / objectmentor.com
> > > Senior Consultant      Object Mentor, Inc.
> > > http://www.junit.org
> > >
> > >
> > >
> > >
> > > Here is my test:
> > > =========================
> > > require 'revision'
> > > require 'runit/testcase'
> > > require 'runit/assert'
> > > require 'runit/cui/testrunner'
> > >
> > > class TestRevision < RUNIT::TestCase
> > >
> > >   def setup
> > >     super
> > >   end
> > >
> > >   def test_equals
> > >     aRevision = Revision.new("1.4", "2001/10/21
> 02:30:18", "kbeck",
> > > "Enhanced TextRunnerTest to catch missing return
> values.")
> > >     bRevision = Revision.new("1.4", "2001/10/21
> 02:30:18", "kbeck",
> > > "Enhanced TextRunnerTest to catch missing return
> values.")
> > >     assert_equals(aRevision, bRevision)
> > >   end
> > > end
> > >
> > > RUNIT::CUI::TestRunner.run(TestRevision.suite)
> > > ==========================
> > >
> > > And the file I'm testing:
> > >
> > > ==========================
> > > class Revision
> > >   attr_reader :revision, :date, :name, :log
> > > end
> > > ==========================
> > >
> > > And of course, the error:
> > >
> > > ==========================
> > > $ ruby test_revision.rb
> > >
> > > TestRevision#test_equals E.
> > > Time: 0.0
> > > FAILURES!!!
> > > Test Results:
> > >  Run: 1/1(0 asserts) Failures: 0 Errors: 1
> > > Errors: 1
> > > test_revision.rb:13:in
> `initialize'(TestRevision): wrong # of 
> > arguments(4
> > > for 0)
> > >  (ArgumentError)
> > >         from test_revision.rb:13:in `new'
> > >         from test_revision.rb:13:in
> `test_equals'
> > >         from test_revision.rb:19
> > > ==========================
> > 
> > -- 
> > Armin.
> > 
> > -----------------------------------------------
> > Armin Roehrl, http://www.approximity.com
> > "The best way to predict the future is to invent
> it."
> >                                           --Alan
Kay


__________________________________________________
Do You Yahoo!?
Find a job, post your resume.
http://careers.yahoo.com