Hi all,
I posted a similar question a short time ago. But I
don’t think the replies help me understand the
behaviors. So I post a short version( sorry if it
bothers you again).
I have the following script. I don’t call Song#to_s in
my script but I can print all the attributes of a
song. Why is that?
Thanks,
Li
#########
class Song
def initialize(name,artist,duration)
@name=name
@artist=artist
@duration=duration
end
#attr_reader :name, :artist, :duration
def to_s
“#@name\t#@artist\t\t#@duration”
end
end
s=Song.new(‘song1’,‘author1’,‘20’)
puts s
######output
ruby ruby20c.rb
song1 author1 20
chen li wrote:
I have the following script. I don’t call Song#to_s in
my script but I can print all the attributes of a
song. Why is that?
chen li, you can find this answer yourself.
-
Open a console and type:
ri Kernel.puts
-
See that it says that it’s the same as $stdout.puts. Type:
ri IO.puts
-
See that it says that it does the same thing as print does. Type:
ri IO.print
-
See that it tells you that it calls the to_s method of any objects
that aren’t strings.
— Phrogz [email protected] wrote:
you can find this answer yourself.
- See that it tells you that it calls the to_s
method of any objects
that aren’t strings.
Thank you for the detail explanation. Now I understand
why #to_s is called.
Li