[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Stuck on Page 27 of Programming Ruby

Allen Dardenelle

12/31/2005 8:39:00 PM

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)"
end
end
song = Song.new("Bicylops", "Fleck", 260)
song.to_s

Here is my error:

ruby.rb:8:in `initialize': wrong number of arguments (3 for 0)
(ArgumentError)
from ruby.rb:8:in `new'
from ruby.rb:8

--
Posted via http://www.ruby-....


5 Answers

simonh

12/31/2005 8:45:00 PM

0

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

Alder Green

12/31/2005 8:47:00 PM

0

Hello Allen,

The problem appears to be with this line:

Song.new("Bicylops", "Fleck", 260)

The error message says "wrong number of arguments (3 for 0)", meaning that
Song#initialize (the initialize method defined by "def initialize ....
end" inside the Song class) doesn't take any arguments, while in the above
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:

Song.new()

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.

Regards,
Alder Green


On 12/31/05, Allen Dardenelle <junk@dardenelle.com> wrote:
>
> 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)"
> end
> end
> song = Song.new("Bicylops", "Fleck", 260)
> song.to_s
>
> Here is my error:
>
> ruby.rb:8:in `initialize': wrong number of arguments (3 for 0)
> (ArgumentError)
> from ruby.rb:8:in `new'
> from ruby.rb:8
>
> --
> Posted via http://www.ruby-....
>
>

Ryan Leavengood

12/31/2005 8:48:00 PM

0

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
end
end

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 output.

Ryan

On 12/31/05, Allen Dardenelle <junk@dardenelle.com> wrote:
> 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)"
> end
> end
> song = Song.new("Bicylops", "Fleck", 260)
> song.to_s
>
> Here is my error:
>
> ruby.rb:8:in `initialize': wrong number of arguments (3 for 0)
> (ArgumentError)
> from ruby.rb:8:in `new'
> from ruby.rb:8


Gavri Fernandez

12/31/2005 8:50:00 PM

0

On 1/1/06, Allen Dardenelle <junk@dardenelle.com> wrote:
> 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)"
> end
> end
> song = Song.new("Bicylops", "Fleck", 260)
> song.to_s
>
> Here is my error:
>
> ruby.rb:8:in `initialize': wrong number of arguments (3 for 0)
> (ArgumentError)
> 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
end
end

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 :)
--
gavri
http://www.livejournal.com/use...


Allen Dardenelle

12/31/2005 9:27:00 PM

0

Wow, thanks everyone for the fast replies!

That was the problem alright.

Happy New Year Everyone!!! :-D



--
Posted via http://www.ruby-....