Попробуйте их:
#!/usr/local/bin/ruby -w
require 'benchmark'
iterations = 1000000
Benchmark.bmbm do |bench|
numbers = (1..100).to_a
bench.report('inject') do
x = numbers.inject { |sum, num| sum + num }
end
bench.report('eval') do
x = eval(numbers.join('+'))
end
end
Что дает:
telemachus ~ $ ruby bench.rb
Rehearsal ------------------------------------------
inject 0.000000 0.000000 0.000000 ( 0.000029)
eval 0.000000 0.000000 0.000000 ( 0.000261)
--------------------------------- total: 0.000000sec
user system total real
inject 0.000000 0.000000 0.000000 ( 0.000047)
eval 0.000000 0.000000 0.000000 ( 0.000186)
Но на самом деле, я думаю, вы микрооптимизируете.Я бы использовал inject
, если только он не был крайне неэффективным, поскольку для этого был построен метод.
Также я думаю, что у вашего кода для inject
есть две проблемы.Во-первых, вы не имеете в виду int
, вы имеете в виду sum
.Во-вторых, вы можете просто добавлять предметы, а не использовать +=
.Первый параметр inject
автоматически накапливает значение.