2012-06-01 2 views
8

reverse 메서드를 사용하지 않고 reverse_each 반복기를 사용하여 Enumerable (Array와 같은)을 역전 시키려고합니다. Ruby에서 열거 형 되감기

나는 코드를 수행하면 충분한 것을, 희망 :

p [1,2,3].reverse_each {|v| v } 

블록이 orded이 뒤바뀜의 배열을 반환하지 않습니다하지만. 물론 나는

[1,2,3].reverse_each {|v| p v } 

을 쓸 수 있지만 첫 번째 방법으로 항목을 수집하고 싶습니다. 이 행동이 있다면 출처는 무엇이며 요구 사항을 충족시키기 위해 표현을 어떻게 작성해야합니까?

답변

19

부터 1.8.7까지, Enumerable#each_*은 블록이 제공되지 않을 때 return an enumerator이다. 꽤 좋았습니다. 이제는 원래의 많은 명령형 메소드를 표현식으로 기능적으로 사용할 수 있습니다. 당신이 항목을 수집하는 열거에 Enumerable#map를 사용하려면

그래서 :

reversed_values = [1, 2, 3].reverse_each.map { |x| 2*x } 
#=> [6, 4, 2] 
+0

의 새로운 세트를 형성한다'슈퍼 편리한 reverse_each'! 감사! –

-1

는 또 다른 방법은 것 [1, 2, 3].reverse_each.to_a

+0

배열에서 to_a를 호출 중입니다 ... – askl56

+0

죄송합니다. – Dorian

-1

(1..3) .reverse_each {| V |

그것은 임시 배열을 구축하고 역순이 어레이를 통과하지만, 변형 수집 역방향 복사

없는 블록 인 경우를 반환하지 않는 : PV}

생산 물품 가 주어지면 열거 자 (enumerator)가 대신 반환됩니다.

그러나 루비의지도 방법은

는 열거의 모든 요소에 대해 한 번 블록의 실행 결과로 새로운 배열을 돌려줍니다.

p [1,2,3] .reverse_each.map {| v | V}

reverse_each은 - 반복자로

지도 역할을합니다 - 수집