我阅读了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个步骤是什么样的?
答案 0 :(得分:6)
由于您没有为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