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つのステップはどのようになりますか?
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つのステップはどのようになりますか?
のデフォルト値を指定しなかったため、の最初の値である。reduce
に設定されます。memo
sentence.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