在Ruby中更改Enumerator的值

时间:2015-10-07 05:25:10

标签: ruby iteration enumerators

我在irb中有这段代码:

2.2.1 :001 > a = 0
=> 0 
2.2.1 :002 > b = (a..a+6).step(3)
=> #<Enumerator: 0..6:step(3)> 
2.2.1 :004 > puts b.inspect
#<Enumerator: 0..6:step(3)>
=> nil 
2.2.1 :005 > a = 1
=> 1 
2.2.1 :007 > puts b.inspect
#<Enumerator: 0..6:step(3)>
=> nil 

我想要实现的是每次迭代都会更改a的值,但a保持相同的值,更糟糕的是,Ruby只是将a的值更改为0有没有办法声明动态枚举器?每次更改变量值时都会改变值? 谢谢。

1 个答案:

答案 0 :(得分:1)

当您编写b = (a..a+6).step(3)时,表达式的评估大致为:b = (0..6).step(3)。在此行之后更改a,不会更改b。如果您想要更改b,您需要以某种方式重新分配,最简单的方法是在您将a更改为1后重复分配b = (a..a+6).step(3)