2012-01-12 146 views
1

我想通过注射的方法来记录的10个线程的平均运行时间,但它给我这个错误:红宝石阵列注入

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