これは、この例を考慮して、アキュムレータの範囲の問題である可能性があると思います。
# example Organism class
class Organisim
attr_accessor :predict, :resources, :prediction
def initialize
@resources = 0
end
def predict
@prediction = rand(10)
@prediction
end
end
# initialize @organisims
@organisims = []
100.times do
@organisims << Organisim.new
end
puts "!!!! Starting Organisim Specific Run"
# iterate over array tracking organisim's resource
@organisims.each_with_index do |org, i|
# parrallel assignment
r, p = rand(10), org.predict
#ruby ternery operator
(p == r) ? org.resources += 1 : org.resources -= 1
puts "Run #{i} Prediction: #{org.prediction} Instance Resources: #{org.resources} Overall Resources: n/a"
end
puts "!!!! Cumulative Resource Run"
# resources scoped outside the iteration loop as accumulator
overall_resources = 0
# re-initialize @organisims
@organisims = []
100.times do
@organisims << Organisim.new
end
@organisims.each_with_index do |org, i|
# parrallel assignment
r, p = rand(10), org.predict
#ruby ternery operator
#track class level resource
(p == r) ? org.resources += 1 : org.resources -= 1
#iterate accumulator
(p == r) ? overall_resources += 1 : overall_resources -= 1
puts "Run #{i} Prediction: #{org.prediction} Instance Resources: #{org.resources} Overall Resources: #{overall_resources}"
end
最初の反復ループは、質問にあるものと似ていますが(私は思う)、組織オブジェクトインスタンス内のリソースを変更しています。
2 番目の反復では、アキュムレータは反復の範囲外にあるため、オブジェクトが作用するにつれて、アキュムレータは拡大および縮小します。:-)