找到最长的单词。
longest = %w{cat sheep bear}.inject do |memo, word|
memo.length > word.length ? memo : word
end
我猜测memo
将以值"cat"
开头,因为inject
没有收到任何参数。我还猜测word
的第一个值是sheep
,然后是word
和bear
。
我没有关注块及其语法中发生的事情。如果有人可以详细说明,我将不胜感激。
答案 0 :(得分:5)
<强> 1。因此,我猜测备忘录将以值cat开始,因为注入没有传递给它的参数。
如果没有明确指定备忘录的初始值,那么 第一个集合元素用作备忘录的初始值。
<强> 2。我还猜测第一个单词将是绵羊......然后是下一个单词,承担。
您可以使用puts
检查每个阶段栏的最终分配,但这只是注入方法的返回值:
longest = %w{ cat sheep bear }.inject do |memo, word|
puts "memo is currently #{memo}",
"word is currently #{word}",
"-----------------------"
memo.length > word.length ? memo : word
end
#memo is currently cat
#word is currently sheep
#-----------------------
#memo is currently sheep
#word is currently bear
#-----------------------
longest #=> "sheep"
最后另一种更加Rubyish的方法来获得最长的词:
%w{ cat sheep bear }.max_by(&:length) #=> "sheep"
答案 1 :(得分:1)
使用inject
,该块应返回memo
在这种情况下,conditional operator用于返回两个值中的一个:memo
的现有值,如果memo
长于当前字词或word
如果当前单词的长度或长度相同。也就是说,这是一种通过保持memo
中迄今为止最长的单词的单词列表的方法(或者当长度被绑定时最近看到的单词。)
然后在结尾inject
返回memo
的最终值。