Already stalled in Pick Axe book - could use some help

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

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:

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.

Regards,
Jeff

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)”

On 9/3/06, James B. [email protected] wrote:

class Song

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.

Exactly
maybe the lines

end # of initialize
def to_s

are missing

HTH
Robert


James B.

“Simplicity of the language is not what matters, but
simplicity of use.”

  • Richard A. O’Keefe in squeak-dev mailing list


Deux choses sont infinies : l’univers et la bêtise humaine ; en ce qui
concerne l’univers, je n’en ai pas acquis la certitude absolue.

  • Albert Einstein

Jeff Rohrer wrote:

@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 B.

“Simplicity of the language is not what matters, but
simplicity of use.”

  • Richard A. O’Keefe in squeak-dev mailing list

Jeff Rohrer wrote:

irb(main):002:1> def initialize(name, artist, duration)
=> “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.

Jeff Rohrer wrote:

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

ChrisH wrote:

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.