1

Rubyで任意の関数呼び出しを取る単純なタイマーメソッドを作成するには?

例: time rspecまたはtime get_primes(54784637)

( ) で渡された関数の結果を返す必要がありget_primesます。

以下はまったく機能しません。

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

ルビー1.9.3

4

3 に答える 3

5

ブロックを使用する方がRuby風です。

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

time { rspec }
于 2012-09-08T14:56:42.643 に答える
3

この機能は、Ruby の標準ライブラリのBenchmarkモジュールで既に利用可能です。

require 'benchmark'

time = Benchmark.realtime { 10_000.times { print "a" } }
于 2012-09-08T15:02:21.127 に答える
2

次のようにしてみてください。

def time(&block)
  t = Time.now
  result = block.call
  puts "\nCompleted in #{(Time.now - t)} seconds"
  result
end
于 2012-09-08T14:59:06.963 に答える