2011-11-20 78 views

回答

9

闭包可以修改对象的范围,就像这样:

require 'benchmark' 

a = nil 
puts Benchmark.measure { a = "a" * 1_000_000 } 
puts a.size 

# => 0.000000 0.000000 0.000000 ( 0.004865) 
# => 1000000 
+0

因此,关闭有一个可写的指针,指向传递给它们的内容?并且可以关闭修改@a和@@ a,假设它们是在关闭之外定义的。 – justingordon

+0

@justingordon:是的,他们可以。 – Miikka

+3

Yuck。我真的希望Benchmark会返回类似于''[time,result]''。然后你可以:'时间,a = Benchmark.measure {...}' – devth

0

随着https://github.com/igorkasyanchuk/benchmark_methods

没有更多这样的代码:

t = Time.now 
user.calculate_report 
puts Time.now - t 

现在你可以这样做:

benchmark :calculate_report # in class 

只需调用你的方法

user.calculate_report