7

为什么这段代码会“锁定”红宝石?克服它的最好方法是什么?我在下面发布了我的解决方案。还有另一种方法可以做到这一点吗?提前致谢!

代码:

nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 }

我的解决方案:

nums = [1, 2, 3]
adjustments = []
nums.each { |i| adjustments << i + 1 }
nums += adjustments 
4

2 回答 2

11

那是因为每个都使用一个枚举器(所以如果你继续添加它,它永远不会到达末尾)。

您可以在应用每个之前复制数组。

nums = [1, 2, 3] 
nums.dup.each { |i| nums << i + 1 }

另一种方法是附加 map 给出的额外元素:

nums = [1, 2, 3] 
nums += nums.map { |i|  i + 1 }
于 2012-09-02T01:37:45.927 回答
5
nums = [1, 2, 3] 
nums.each { |i| nums << i + 1 }

您在迭代数组时将其添加到数组中,因此它永远不会完成执行。

于 2012-09-02T01:39:06.970 回答