Тест производительности занимает блок и возвращает время: http://ruby -doc.org / stdlib-1.9.3 / libdoc / benchmark / rdoc / Benchmark.html
require 'benchmark' puts Benchmark.measure { "a"*1_000_000 }
Что, если вы хотите провести тестирование операции и получить и возвращаемое значение, и истекшее время?
Или, иначе говоря, может ли замыкание изменить переданный в него объект?
Закрытие может изменять объекты в своей области, например так:
require 'benchmark' a = nil puts Benchmark.measure { a = "a" * 1_000_000 } puts a.size # => 0.000000 0.000000 0.000000 ( 0.004865) # => 1000000
С https://github.com/igorkasyanchuk/benchmark_methods
Код больше не похож на этот:
t = Time.now user.calculate_report puts Time.now - t
Теперь вы можете сделать:
benchmark :calculate_report # in class
И просто назовите свой метод
user.calculate_report