Это моя функцияМожет ли кто-нибудь уточнить, почему значение переменной в моем цикле не обновляется до тех пор, пока цикл не будет закрыт?
def rating(array)
sum_count = array.values.inject(0) { |sum_count,value| sum_count + value }
run_count = 0
array.each do |tag,count|
run_count += count
cum_distn = run_count/sum_count
logger.debug "cum_distn is #{cum_distn.to_f}; run_count is #{run_count.to_f}; sum_count is #{sum_count}"
if cum_distn < 0.25
...
elsif cum_distn < 0.5
...
else
...
end
end
end
Для 2-х объектов в моем массиве с отсчетами 1 каждый мой регистратор показывает это:
cum_distn is 0.0; run_count is 1.0; sum_count is 2
cum_distn is 1.0; run_count is 2.0; sum_count is 2
кажется, что значение cum_distn только обновляя когда-то один цикл завершен, пока я намереваюсь его обновить сразу перед открытием функции if. У меня есть два вопроса:
(a) Почему это происходит (поскольку я не вижу никакого логического объяснения)?
(b) Как я могу исправить это, чтобы делать то, что хочу?
еще не закончил читать ваш вопрос, но вы должны заменить 'def rating (array)' by 'def rating (hash)' потому что 'hash.values' имеет больше смысла, чем' array.values' ... – Damien