Ruby中“each”循环的动态变化

时间:2010-01-09 08:23:08

标签: ruby loops

我是Ruby的新手,我面临着关于“每个”类似循环的问题。假设代码如下

startIndex = 1
endIndex = 200

(startIndex..endIndex).each do |value|
   p value
   if value>150 then endIndex=100
end

当我运行代码时,它将运行到200,直到150.有没有办法在Ruby中动态更改循环范围的限制?

提前感谢您的帮助

Tryskele

5 个答案:

答案 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