Forum: Ruby Stuck on Page 27 of Programming Ruby

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
Allen D. (Guest)
on 2005-12-31 22:38
HI all, this is my first post in the forum!  I got the Ruby and Rails
books for Christmas and I am having a lot of fun with them.  But I am
stuck on page 27 in Programming Ruby.  I've gotten the code from the web
site and it's not working.

Here is the code:

!#/usr/local/bin/ruby -w

class Song
  def to_s
    "Song: #@name--#@artist (#@duration)"
song ="Bicylops", "Fleck", 260)

Here is my error:

ruby.rb:8:in `initialize': wrong number of arguments (3 for 0)
        from ruby.rb:8:in `new'
        from ruby.rb:8
Alder G. (Guest)
on 2005-12-31 22:48
(Received via mailing list)
Hello Allen,

The problem appears to be with this line:"Bicylops", "Fleck", 260)

The error message says "wrong number of arguments (3 for 0)", meaning
Song#initialize (the initialize method defined by "def initialize ....
end" inside the Song class) doesn't take any arguments, while in the
line you are in fact supplying 3 arguments to it.

So, either the problem is in the call and you're supposed to call
Song.newsans arguments:

Or Song#initialize got ill-defined/overriden in some problematic way.

Option #2 seems more likely; it's not logical that you can create a song
object without even a name.

Alder G.
simonh (Guest)
on 2005-12-31 22:51
(Received via mailing list)
you need to add the code from earlier in the book. look for:

def initialize(name, artist, duration)

can't remember the exact page i'm afraid.

happy new year
Ryan L. (Guest)
on 2005-12-31 22:51
(Received via mailing list)
Hi Allen,

You need to define an initialize method which can take the arguments
you are passing to "new." For example:

class Song
  def initialize(name, artist, duration)
    @name, @artist, @duration = name, artist, duration

I'm not sure if that is an oversight in the book, or if maybe the
initialize was introduced earlier and you forgot to include it.

Also you will need a "puts" before song.to_s if you expect to see any

Gavri F. (Guest)
on 2005-12-31 22:51
(Received via mailing list)
On 1/1/06, Allen D. <removed_email_address@domain.invalid> wrote:
>   def to_s
>         from ruby.rb:8:in `new'
>         from ruby.rb:8

This code should be after this:

class Song
def initialize(name, artist, duration)
    @name     = name
    @artist   = artist
    @duration = duration

You probably thought that the code you chose to execute was
independent of the code above it. In Ruby, classes are open and new
methods can be added to a class by using the 'class' keyword again and
again :)
Allen D. (Guest)
on 2005-12-31 23:26
Wow, thanks everyone for the fast replies!

That was the problem alright.

Happy New Year Everyone!!!  :-D
This topic is locked and can not be replied to.