1

誰もがこのコードのようなものに遭遇したと思います:

def query(sql)
  logger.debug "Db: Executing query #{sql}"
  result = nil
  ts = Benchmark.realtime do
    result = @db.exec sql
  end
  logger.debug "Db: Query completed in #{ts}"
  result
end

率直に言って、これは醜く見えます。同じ結果を達成するためのよりエレガントな方法はありますか?

4

1 に答える 1

2

以下のような独自のラッパー メソッドを記述して、醜さを隠すことができます。

require 'benchmark'

def bm (description, &block)
  [].tap do |result|
  ts = Benchmark.realtime do
    result <<  block.call
  end
    p "#{description} completed in #{ts}"
  end.first
end

result =  bm("db query") {"db result"}
p result 

出力:

"db query completed in 5.131e-06"
"db result"
于 2012-10-12T13:29:29.437 に答える