2012-01-12 3 views
1

Я пытаюсь войти среднее время работы 10 потоков с помощью метода INJECT, но это дает мне эту ошибку:Рубин массив впрыснуть

undefined method `+' for #<Thread:0x10b211590 dead> (NoMethodError) 
    from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/open-uri.rb:301:in `inject' 
    from client_test.rb:13:in `each' 
    from client_test.rb:13:in `inject' 
    from client_test.rb:13 

Вот код:

require 'open-uri' 
program_start_time = Time.now 
threads = 10.times.map do 
    Thread.new do 
    time = Time.now 
    open('http://ca.yahoo.com/?p=us').read.length 
    Time.now-time 
    end 
end 

threads.map &:join 
puts threads.inject() { |sum, e| sum + e.value}.to_f/threads.size 
puts Time.now - program_start_time 

ответ

3

Вам нужно для получения начального значения для inject в этом случае, так как если вы этого не сделаете, начальное значение будет просто первым элементом в массиве:

puts threads.inject(0) { |sum, e| sum + e.value}.to_f/threads.size 
2

Вы не предоставили начальное значение суммы в

threads.inject() { |sum, e| sum + e.value}.to_f/threads.size 

Исправить это с

threads.inject(0) { |sum, e| sum + e.value}.to_f/threads.size