with and without Song#to_s again

Discussion in 'Ruby' started by chen li, Dec 30, 2006.

  1. chen li

    chen li Guest

    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?



    class Song
    def initialize(name,artist,duration)
    #attr_reader :name, :artist, :duration

    def to_s

    puts s


    Do You Yahoo!?
    Tired of spam? Yahoo! Mail has the best spam protection around
    chen li, Dec 30, 2006
    1. Advertisements

  2. As s is not a String (that is not s.is_a? String), it is converted
    into string by puts. That exactly means your method to_s is called for
    doing so.

    Vincent Fourmond, Dec 30, 2006
    1. Advertisements

  3. chen li

    Phrogz Guest

    chen li, you can find this answer yourself.
    1) Open a console and type:
    ri Kernel.puts

    2) See that it says that it's the same as $stdout.puts. Type:
    ri IO.puts

    3) See that it says that it does the same thing as print does. Type:
    ri IO.print

    4) See that it tells you that it calls the to_s method of any objects
    that aren't strings.
    Phrogz, Dec 30, 2006
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.