2012-09-02 3 views
3

나는 루비 문서의 예제를 통해 읽을 수 있지만이 코드에서 무슨 일이 일어나고 있는지 아직 확실하지 않다 : reduce 메서드는 어떻게 작동합니까?

sentence = "How are you?" 
sentence.chars.reduce do |memo, char| 
    %w[a e i o u y].include?(char) ? memo + char * 5 : memo + char 
end 

코드 블록이 처음 실행될 때 메모는 무엇입니까

? 후속 5 단계는 어떻게 생겼습니까?

답변

6

reduce에 기본값을 제공하지 않았으므로 memo이 인 첫 번째 값인 sentence.chars으로 설정됩니다. 1

반복 :

  • memo"H"
  • char 블록의 "o"
  • 결과는 첫 번째 반복의 결과는 다음 블록으로 전달 "Hooooo"

이다 첫 번째 인수로. 따라서 반복 # 2 :

  • memo"Hooooo"
  • char 블록의 "w"
  • 결과 이것은 어레이의 각 요소와 종료됩니다 계속 될 "Hooooow"

임 마지막 요소에 적용된 후 블록의 결과가됩니다.

행동이 그냥 다음 코드를 실행 볼 수있는 사소한 방법 : 감사에게,

sentence = "How are you?" 
sentence.chars.reduce do |memo, char| 
    puts "Memo = #{memo}, char = #{char}" 
    %w[a e i o u y].include?(char) ? memo + char * 5 : memo + char 
end 
+0

최고 @robbrit합니다. – Fralcon

+1

이 너무 늦게 내가 알고 있지만 나는이 대답을 가로 질러 와서 생각 반복 # 1 '문자가없는 ' 그래서 블록의 결과가 될 것입니다 e'.''O '가 될 것입니다 : 'Hooooo' 'memo'는'Hooooo'가 될 것입니다. 'char'는'w'이 될 것입니다 그 결과 :'Hooooow' –

+0

고마워요! 나는 그것을 테스트 할 때 "Hello"나 뭔가를 사용해야 만했을 것이다. – robbrit

관련 문제