startIndex= 1
endIndex= 200
range= (startIndex .. endIndex) # => 1..200
endIndex= 150
range # => 1..200
(a..b)
создает объект класса Range.Объект Range не содержит указателей на передаваемые вами переменные.Он скорее содержит ссылки на объекты, на которые указывают переменные.Если вы измените переменную, чтобы переменная содержала ссылку на другой объект, Range по-прежнему будет содержать ссылку на старый объект.Таким образом, вы можете изменить диапазон, изменив сам объект.Но невозможно изменить Integer после его создания.
a= "abc"
b= "def"
range= (a..b) # => "abc".."def"
b.sub!("e", "$")
range # => "abc".."d$f"
Если единственное, что вы хотите сделать, это выйти из цикла, вы можете просто использовать break
(a..b).each do |v|
break if something
end