2012-10-12 102 views
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 

坦率地說,這看起來醜陋。有沒有更好的方法來達到相同的結果?

+0

你能否提供另一種語言更優雅的代碼? – megas

+0

http://codereview.stackexchange.com/也許? –

+0

這似乎並不是那麼不規則。像這樣的情況應該很少。 – tadman

回答

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"