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

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 wrote:

    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?
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 Y. wrote:

Cd Cd wrote:

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

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

On Tue, Sep 04, 2007, Cd Cd wrote:

‘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))?

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 B. wrote:

On Tue, Sep 04, 2007, Cd Cd wrote:

‘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))?

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

Yes it does.