我试图在不使用reverse
方法但使用reverse_each
迭代器的情况下反转 Enumerable(如 Array)。
我希望,以下代码就足够了:
p [1,2,3].reverse_each {|v| v }
但是该块不会以相反的顺序返回数组。我当然可以写
[1,2,3].reverse_each {|v| p v }
但我想以第一种方式收集物品。如果这种行为的来源是什么,我应该如何写我的表达来满足要求?
我试图在不使用reverse
方法但使用reverse_each
迭代器的情况下反转 Enumerable(如 Array)。
我希望,以下代码就足够了:
p [1,2,3].reverse_each {|v| v }
但是该块不会以相反的顺序返回数组。我当然可以写
[1,2,3].reverse_each {|v| p v }
但我想以第一种方式收集物品。如果这种行为的来源是什么,我应该如何写我的表达来满足要求?
从 1.8.7 开始,Enumerable#each_*
方法在没有提供块时返回一个枚举器,因此那些最初的命令式方法现在可以在纯表达式中使用。
因此,如果您想收集项目,请Enumerable#map
在该枚举器上使用:
reversed_values = [1, 2, 3].reverse_each.map { |x| 2*x }
#=> [6, 4, 2]
(1..3).reverse_each {|v| 光伏 }
产生:
1 2 3
它构建一个临时数组并以相反的顺序遍历该数组,但不返回转换后集合的反向副本
如果没有给出块,则返回一个枚举器。
但是ruby的map方法
为枚举中的每个元素返回一个新数组,其中包含一次运行块的结果。
p [1,2,3].reverse_each.map {|v| v }
reverse_each - 将充当迭代器
map - 将形成一组新的集合
另一种方法是[1, 2, 3].reverse_each.to_a