2011-11-20 2 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

그래서 클로저는 전달되는 것에 대한 쓰기 가능한 포인터를 가지고 있습니까? 그리고 closure는 @a와 @@ a를 수정합니다. closure가 closure 외부에서 정의되었다고 가정합니다. – justingordon

+0

@justingordon : 가능합니다. – Miikka

+3

헉. 나는 Benchmark가'[time, result]'와 같은 것을 반환하기를 바란다. 그러면 다음과 같이 할 수 있습니다.'time, 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