Hi, total noob here. I'm only on page 25 of the Pick Axe book and I'm a
little stuck:
I'm running Ruby version 1.8.4 on Windows XP Home Edition. I'm entering
code via irb.
Here's the problem: I enter the following code from the book:
<elided />
irb(main):008:0> load "c:/code/song.rb"
=> true
Your code seems to be fine--however, you mention using
irb but also, obviously, #load a file here. If the file
contains the old code and you #load it after you have
entered the new class code in irb, it will redefine your
methods.
Try and just enter the above class definition either in
irb or the file (and #load it in irb), but not both and
see if that helps.
Jeff Rohrer wrote:
> Hi, total noob here. I'm only on page 25 of the Pick Axe book and I'm a
> little stuck:
>
> I'm running Ruby version 1.8.4 on Windows XP Home Edition. I'm entering
> code via irb.
>
> Here's the problem: I enter the following code from the book:
>
> class Song
> def initialize(name, artist, duration)
> @name = name
> @artist = artist
> @duration = duration
> end
>
> def to_s
> "Song: #@name--#@artist (#@duration)"
> end
> end
>
I just tried this on WinXP, ruby 1.8.4 (2005-12-24) [i386-mswin32]
Jeff Rohrer wrote:
> def to_s
> "Song: #@name--#@artist (#@duration)"
...
You forgot the curly braces, should be
"Song: #{@name}--#{@artist} (#{@duration})"
The curly braces are not needed for class, instance, or global
variables. (And maybe some other situations I don't know about.) Jeff's
original code is just fine.
Try and just enter the above class definition either in
irb or the file (and #load it in irb), but not both and
see if that helps.
<elided />
Got it. Thanks! That works, now I can move on:
C:\>irb
irb(main):001:0> class Song
irb(main):002:1> def initialize(name, artist, duration)
irb(main):003:2> @name = name
irb(main):004:2> @artist = artist
irb(main):005:2> @duration = duration
irb(main):006:2> end
irb(main):007:1> def to_s
irb(main):008:2> "Song: #@name--#@artist (#@duration)"
irb(main):009:2> end
irb(main):011:0> song = Song.new("Bicyclops", "Fleck", 260)
=> #<Song:0x2c8bc78 @duration=260, @name="Bicyclops", @artist="Fleck">
irb(main):012:0> song.to_s
=> "Song: Bicyclops--Fleck (260)"
It may be time for you to create a Ruby source file. "irb" is a very useful
tool, but once a program becomes as complex as the one you are playing
with, you have more than crossed the threshold of needing a source file.