Ваша проблема здесь в том, что вы используете цикл for
вместо метода Enumerable, такого как each
.
Краткий ответ, просто измените for x in 0..s3
на sume2.each_index do |x|
Более длинный ответ, вы можете сравнить следующее:
for x in 0..3
Thread.new { loop { puts(x); sleep 1 } }
end
с:
(0..3).each do |x|
Thread.new { loop { puts(x); sleep 1 } }
end
Первый просто печатает 3
несколько раз, а второй печатает 1,2,3
как положено
Почему? Это потому что с циклом for
. Ваша x
переменная перезаписывает каждый цикл. Для каждого ваша x
переменная ограничена блоком , и у вас есть замыкание .
Для более подробного объяснения см. Замыкания и циклы в Ruby , или https://scotch.io/tutorials/understanding-ruby-closures,, или просто Google "замыкания в ruby"
Обратите внимание, что в Ruby не является идиоматическим использование циклов for
, по этой конкретной причине