Ruby reduce方法在这里是如何工作的?

Ruby reduce方法在这里是如何工作的?,ruby,Ruby,我通读了ruby文档示例,但仍然不确定这段代码中发生了什么: 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设置为句子.chars中的第一个值,即“H” 迭代#1

我通读了ruby文档示例,但仍然不确定这段代码中发生了什么:

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
设置为
句子.chars
中的第一个值,即
“H”

迭代#1:

  • 备忘录
    “H”
  • char
    “o”
  • 块的结果是
    “Hooooo”
然后将第一次迭代的结果作为第一个参数传递到块中。所以在迭代#2中:

  • 备忘录
    “Hooooo”
  • char
    “w”
  • 块的结果是
    “hoooow”
这将对数组的每个元素继续进行,最终结果将是应用于最后一个元素后的块结果

一个简单的方法就是执行以下代码:

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

这太晚了,我知道,但我遇到了这个答案,我认为迭代1
char将是'o'而不是'e'。
因此块的结果将是:
hoooo
,对于块2,
memo
将是
hoooo
char
将是
w
,结果是:
hoooo
谢谢!我一定是在测试时用了“Hello”之类的词。