Already stalled in Pick Axe book - could use some help

J

Jeff Rohrer

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 successfully load the code using a file called song.rb here:

irb(main):008:0> load "c:/code/song.rb"
=> true

Now the book states that if I type in this:
song = Song.new("Bicylops", "Fleck", 260)
song.to_s

I should see this:

"Song: BicylopsFleck(260)"

But I'm not, I'm getting this:

irb(main):013:0> song = Song.new("Bicylops", "Fleck", 260)
=> #<Song:0x2c80440 @duration=260, @name="Bicylops", @artist="Fleck">
irb(main):014:0> song.to_s
=> "#<Song:0x2c80440>"

Obviously I'm still seeing the object ID when I should be seeing the
string. Any help will be appreciated.

Regards,
Jeff
 
J

James Britt

Jeff said:
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]

demo.rb has the code you provided.

d:\tmp>irb
irb(main):001:0> load 'demo.rb'
=> true
irb(main):002:0> song = Song.new("Bicylops", "Fleck", 260)
=> #<Song:0x2b1a370 @name="Bicylops", @duration=260, @artist="Fleck">
irb(main):003:0> song.to_s
=> "Song: Bicylops--Fleck (260)"
irb(main):004:0>

I think you may have something different in your actual source code.



--
James Britt

"Simplicity of the language is not what matters, but
simplicity of use."
- Richard A. O'Keefe in squeak-dev mailing list
 
E

Eero Saynatkari

Jeff said:
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.
 
J

Jeff Rohrer

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.

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)"
 
C

ChrisH

Jeff said:
Hi, total noob here. I'm only on page 25 of the Pick Axe book and I'm a
little stuck: ....snip
def to_s
"Song: #@name--#@artist (#@duration)"
....
You forgot the curly braces, should be
"Song: #{@name}--#{@artist} (#{@duration})"


Cheers
 
D

Derek Chesterfield

...
You forgot the curly braces, should be
"Song: #{@name}--#{@artist} (#{@duration})"

Actually, #@ is a shortcut, when it is an instance variable.
 
P

Phrogz

ChrisH said:
...
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,773
Messages
2,569,594
Members
45,119
Latest member
IrmaNorcro
Top