我在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有没有办法声明动态枚举器?每次更改变量值时都会改变值?
谢谢。
答案 0 :(得分:1)
当您编写b = (a..a+6).step(3)
时,表达式的评估大致为:b = (0..6).step(3)
。在此行之后更改a
,不会更改b
。如果您想要更改b
,您需要以某种方式重新分配,最简单的方法是在您将a
更改为1后重复分配b = (a..a+6).step(3)