3

ruby docsの例を読みましたが、このコードで何が起こっているのかまだわかりません。

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つのステップはどのようになりますか?

4

1 に答える 1

6

のデフォルト値を指定しなかったため、の最初の値である。reduceに設定されます。memosentence.chars"H"

反復#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
于 2012-09-02T23:56:47.747 に答える