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