我是Ruby的新手,我面临着关于“每个”类似循环的问题。假设代码如下
startIndex = 1
endIndex = 200
(startIndex..endIndex).each do |value|
p value
if value>150 then endIndex=100
end
当我运行代码时,它将运行到200,直到150.有没有办法在Ruby中动态更改循环范围的限制?
提前感谢您的帮助
Tryskele
答案 0 :(得分:8)
为什么不只是break
?
(startIndex..endIndex).each do |value|
p value
break if value>=150
end
'因为动态改变循环限制是非常糟糕的做法。
答案 1 :(得分:3)
startIndex= 1
endIndex= 200
range= (startIndex .. endIndex) # => 1..200
endIndex= 150
range # => 1..200
(a..b)
创建Range类的Object。范围对象不保存指向您传递的变量的指针。它宁可持有对象的引用,变量指向。如果更改变量,则变量保持对另一个对象的引用,Range仍保留对旧对象的引用。因此,您可以通过更改对象本身来更改范围。但是一旦创建了整数,就没有办法改变它。
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
答案 2 :(得分:2)
不,你想做什么都行不通。但是,它也是完全不必要的,因为有一个很多更好,惯用的方式来做你想要做的完全相同的事情:
p *(1..150)
答案 3 :(得分:0)
没有
这几乎肯定不是你想要做的。
你想解决什么问题?
答案 4 :(得分:0)
如果您只想在150处停止打印,这些可能会有效。
startIndex = 1
endIndex = 200
(startIndex..endIndex).each do |value|
p value if value <= 150
end
或
startIndex = 1
endIndex = 200
(startIndex..endIndex).each do |value|
p value
if value >= 150
break
end
end