2012-09-08 4 views
1

루비에서 임의의 함수 호출을받는 간단한 타이머 메서드를 만드는 방법은 무엇입니까? 예를 들어Ruby에서 간단한 타이머 메서드를 만드는 방법은 무엇입니까?

: 여전히 (get_primes)에 전달 된 함수의 결과를 반환한다 time rspec 또는 time get_primes(54784637)

.

다음은 잘 작동하지 않습니다 :

def time block 
    t = Time.now 
    result = eval(block) 
    puts "\nCompleted in #{(Time.now - t).format} seconds" 
    result 
end 

루비 1.9.3

+0

이미 표준 ['benchmark'] (http://ruby-doc.org/stdlib-1.9.3에 존재하는 이런 종류의 기능을 실현 /libdoc/benchmark/rdoc/Benchmark.html) library? – Gareth

답변

5

Rubyesque가 블록 사용하기 위해 더 많은 그건 :

def time 
    t = Time.now 
    result = yield 
    puts "\nCompleted in #{Time.now - t} seconds" 
    result 
end 

time { rspec } 
+0

이제 수익률을 이해합니다. (마지막으로.) –

+0

굉장합니다. 고맙습니다! –

2

이처럼보십시오 :

def time(&block) 
    t = Time.now 
    result = block.call 
    puts "\nCompleted in #{(Time.now - t)} seconds" 
    result 
end 
+0

'block.call'을 의미합니까? – Gareth

2

이 기능은 Benchmark 모듈, 루비의 표준 라이브러리에서 사용할 수있는 준비하기 :

require 'benchmark' 

time = Benchmark.realtime { 10_000.times { print "a" } } 
+0

OP가 원하는 블록 결과를 반환하지 않는다는 점을 제외하고는. –

+0

미안하지만, 나는 그에게 OP가 작동하지 않고있다. 단지 그의 질문의 시간 계산 부분이 이미 그를 위해 해결되었다고 말하면된다. – Gareth

관련 문제