I am very new to Ruby and currently install Ruby 1.82.15
My question, what's wrong with the following code?
class Song
def initialize(name, artist, duration) @name = name @artist = artist @duration = duration
end
def to_s
puts "Song: #{@name}--#{@artist} (#{@duration})"
end
end
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration) @lyrics = lyrics
end
def to_s
super + " [#{@lyrics}]"
end
end
aSong = KaraokeSong.new("KSongName", "KSongArtist", 225, "Klyrics")
aSong.to_s
The error is:
Song: KSongName--KSongArtist (225)
song.rbw:33:in `to_s': undefined method `+' for nil:NilClass
(NoMethodError)
from song.rbw:37
def to_s
puts "Song: #{@name}--#{@artist} (#{@duration})"
end
it returns nil (the return value of puts). try
def to_s
"Song: #{@name}--#{@artist} (#{@duration})"
end
hth. and welcome aboard!
-a
···
On Sun, 21 Aug 2005, Alucard wrote:
Hello
I am very new to Ruby and currently install Ruby 1.82.15
My question, what's wrong with the following code?
class Song
def initialize(name, artist, duration) @name = name @artist = artist @duration = duration
end
def to_s
puts "Song: #{@name}--#{@artist} (#{@duration})"
end
end
class KaraokeSong < Song
def initialize(name, artist, duration, lyrics)
super(name, artist, duration) @lyrics = lyrics
end
def to_s
super + " [#{@lyrics}]"
end
end
aSong = KaraokeSong.new("KSongName", "KSongArtist", 225, "Klyrics")
aSong.to_s
The error is:
Song: KSongName--KSongArtist (225)
song.rbw:33:in `to_s': undefined method `+' for nil:NilClass
(NoMethodError)
from song.rbw:37
Please help!
Thanks in advance
--
email :: ara [dot] t [dot] howard [at] noaa [dot] gov
phone :: 303.497.6469
Your life dwells amoung the causes of death
Like a lamp standing in a strong breeze. --Nagarjuna
#: Alexandru Popescu changed the world a bit at a time by saying on 8/20/2005 8:09 PM :#
#: chris changed the world a bit at a time by saying on 8/20/2005 7:51 PM :#
I think you should write it:
class Song
[....]
def to_s
"Song: #{@name}--#{@artist} (#{@duration})"
end
end
class KaraokeSong
[...]
def to_s
super + + " [#{@lyrics}]"
end
end
[...]
puts aSong.to_s
:alex |.::the_mindstorm::.|
definitely no double +, just one +. as it was already explained Song#to_s should return a string, while the initial Song#to_s is just printing one and returning nil.