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