Personally, I think this is quite reasonable. I might rename the method
something like “call_and_time”, and I’d probably leave off the empty
parens
after the method name and the yield.
t,rsp=time_method do
Net::HTTP.get_response(URI.parse(url).host, URI.parse(url).path)
end
My problem is that both time_method and get_response returns a value
that i need. Should i use a closure instead of the above?
No, that’s perfectly OK. I would just do minor changes and leave out
the test for block. Your method does not make sense without a block so
I’d just let it throw:
def time_method
t = Time.now
r = yield
Time.now - t, r
end
I’d probably change the order of return values since the result of the
block could be viewed as the more important result.
My problem is that both time_method and get_response returns a value
that i need. Should i use a closure instead of the above?
You can do
rsp = nil
t=time_method do
rsp = Net::HTTP.get_response(URI.parse(url).host,
URI.parse(url).path)
end
Since rsp was bound outside the scope of a block, it gets closed over,
so
rebinding it will alter the outer variable (unlike Python’s lambdas, or
most
other languages for that matter)
You might consider using Ruby’s built-in “benchmark” library as well:
require “benchmark”
rsp = nil
puts Benchmark.measure do
rsp = Net::HTTP.get_response(URI.parse(url).host, URI.parse(url).path)
end
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.