在Ruby中反转可枚举

Mat*_*ski 9 ruby enumerable

我试图在不使用reverse方法的情况下反转Enumerable(如Array),但使用reverse_each迭代器.

我希望,以下代码就足够了:

p [1,2,3].reverse_each {|v| v }
Run Code Online (Sandbox Code Playgroud)

但是块不会以反向的方式返回数组.我当然可以写

[1,2,3].reverse_each {|v| p v }
Run Code Online (Sandbox Code Playgroud)

但我想以第一种方式收集物品.如果这种行为是什么来源,我应该如何编写表达式以满足要求?

tok*_*and 22

从1.8.7开始,Enumerable#each_*方法在没有提供块时返回枚举器,因此现在可以在纯表达式中使用那些原始命令方法.

因此,如果您想收集项目,请使用Enumerable#map该枚举器:

reversed_values = [1, 2, 3].reverse_each.map { |x| 2*x }
#=> [6, 4, 2]
Run Code Online (Sandbox Code Playgroud)