Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对返回值的ruby操作进行基准测试_Ruby_Closures_Benchmarking - Fatal编程技术网

对返回值的ruby操作进行基准测试

对返回值的ruby操作进行基准测试,ruby,closures,benchmarking,Ruby,Closures,Benchmarking,基准测试获取一个块并返回时间: 如果您希望对操作进行基准测试并获取返回值和经过的时间,该怎么办 或者,换句话说,闭包可以修改传递给它的对象吗?闭包可以修改其范围内的对象,如下所示: require 'benchmark' a = nil puts Benchmark.measure { a = "a" * 1_000_000 } puts a.size # => 0.000000 0.000000 0.000000 ( 0.004865) # => 1000000

基准测试获取一个块并返回时间:

如果您希望对操作进行基准测试并获取返回值和经过的时间,该怎么办


或者,换句话说,闭包可以修改传递给它的对象吗?

闭包可以修改其范围内的对象,如下所示:

require 'benchmark'

a = nil
puts Benchmark.measure { a = "a" * 1_000_000 }
puts a.size

# =>   0.000000   0.000000   0.000000 (  0.004865)
# => 1000000
t = Time.now
user.calculate_report
puts Time.now - t

不再有这样的代码:

require 'benchmark'

a = nil
puts Benchmark.measure { a = "a" * 1_000_000 }
puts a.size

# =>   0.000000   0.000000   0.000000 (  0.004865)
# => 1000000
t = Time.now
user.calculate_report
puts Time.now - t
现在您可以执行以下操作:

benchmark :calculate_report # in class
然后调用你的方法

user.calculate_report

那么闭包有一个可写指针,指向传递给它们的内容?并且闭包也可以修改@a和@a,假设它们是在闭包之外定义的。@justingordon:是的,它们可以。糟糕。我真的希望基准测试能够返回如下内容:
[时间,结果]
。然后您可以:
time,a=Benchmark.measure{…}