I don't get how the method is added in this case

Discussion in 'Ruby' started by Cd Cd, Sep 4, 2007.

  1. Cd Cd

    Cd Cd Guest

    I have the following

    #!/usr/bin/ruby -w

    require 'net/http'

    h=Net::HTTP.new('www.pragmaticprogrammer.com',80)
    response=h.get('/index.html',nil)

    if(response.message=="OK")
    puts response.body.scan(/<img src="(.*?)"/m).uniq
    end

    I know you can add methods to an existing class, but in the above code,
    there is the following:

    puts response.body.scan(/<img src="(.*?)"/m).uniq

    I don't get how the methods are being added to the class in this case.
    Is uniq() being added to scan(), the being added to body() which in turn
    is added to the response object?
     
    Cd Cd, Sep 4, 2007
    #1
    1. Advertisements

  2. Cd Cd

    Alex Young Guest

    They aren't being added to a class so much as called on the result of
    each method call. You could rewrite it like this:

    b = response.body
    imgs = b.scan(/<img src="(.*?)"/m)
    uniq_imgs = imgs.uniq
    puts uniq_imgs

    HTH
     
    Alex Young, Sep 4, 2007
    #2
    1. Advertisements

  3. Cd Cd

    Cd Cd Guest

    But if I go something like
    #!/usr/bin/ruby -w

    require 'net/http'

    h=Net::HTTP.new('www.pragmaticprogrammer.com',80)
    response=h.get('/index.html',nil)

    if(response.message=="OK")
    b = response.body
    p b
    end


    'b' will print out the body of the web page. So 'b' in this case would
    be become the receiver (ie imgs = b.scan(/<img src="(.*?)"/m)), then we
    go from getting the value 'b' (via p b) to 'b' acting like a method
    (via imgs = b.scan(/<img src="(.*?)"/m))?
     
    Cd Cd, Sep 4, 2007
    #3
  4. b is an object in either case. When you 'p b', you're printing out the
    contents of the b object... when you call b.scan, you're calling scan on
    the b object.

    Make more sense?

    Ben
     
    Ben Bleything, Sep 4, 2007
    #4
  5. Cd Cd

    Cd Cd Guest

    Yes it does.
     
    Cd Cd, Sep 4, 2007
    #5
    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.