我是一名Ruby的新手,我在使用“each”循环时遇到了问题。假设代码如下:
startIndex = 1
endIndex = 200
(startIndex..endIndex).each do |value|
p value
if value>150 then endIndex=100
end
当我运行代码时,它会一直运行到200,而不是150。有没有办法在Ruby中动态更改循环范围的限制?
提前感谢您的帮助。
Tryskele
break
?(startIndex..endIndex).each do |value|
p value
break if value>=150
end
startIndex= 1
endIndex= 200
range= (startIndex .. endIndex) # => 1..200
endIndex= 150
range # => 1..200
(a..b)
创建一个Range类对象。Range对象不会持有你传递的变量的指针,而是持有指向变量所指向对象的引用。如果你改变变量,使其持有对另一个对象的引用,那么Range仍然持有对旧对象的引用。因此,通过改变对象本身来改变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
不,你尝试的方法行不通。然而,这也是完全不必要的,因为有一种更好的、惯用的方式可以做到你尝试做的完全相同的事情:
p *(1..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
不。
这几乎肯定不是你想做的事情。
你想要解决什么问题?