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

···

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

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]

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

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:

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

···

<elided />

Regards,
Jeff

--
Posted via http://www.ruby-forum.com/\.

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

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]

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.

Exactly
maybe the lines

end # of initialize
def to_s

are missing

HTH
Robert

···

On 9/3/06, James Britt <james.britt@gmail.com> wrote:

--
James Britt

"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

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

···

--
Posted via http://www.ruby-forum.com/\.

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

···

On 4 Sep 2006, at 09:37, ChrisH wrote:

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

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.

Jeff Rohrer wrote:

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.

···

--
Paul Lutus
http://www.arachnoid.com