reduce方法如何在这里工作?

时间:2012-09-02 23:49:40

标签: ruby

我阅读了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个步骤是什么样的?

1 个答案:

答案 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