【问题标题】:Change value of Enumerator in Ruby更改 Ruby 中枚举器的值
【发布时间】:2015-10-07 05:25:10
【问题描述】:

我在 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 = 0; def b(x=@a); (x..x+6).step(3); end
  • 是的,这就是我正在做的,它有效,谢谢@Santhosh
  • “每次迭代都改变 a 的值” - 您是否尝试枚举特定的数字序列?如果是这样,请显示预期的结果。也许还有其他方法可以实现。

标签: ruby iteration enumerators


【解决方案1】:

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

【讨论】:

  • 谢谢你,davidrac,我正在使用像 Santosh 指出的那样的功能。
猜你喜欢
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
相关资源
最近更新 更多