重要的是什么目的?第7行

时间:2011-11-21 21:17:04

标签: ruby return-value

我想知道计数变量的用途是什么,就在最后一个结束之前?

# Pick axe page 51, chapter 4

# Count frequency method
def count_frequency(word_list)
    counts = Hash.new(0)
    for word in word_list
        counts[word] += 1
    end
    counts    #what does this variable actually do?
end

puts count_frequency(["sparky", "the", "cat", "sat", "on", "the", "mat"])

4 个答案:

答案 0 :(得分:8)

任何Ruby方法中的最后一个表达式是该方法的返回值。如果counts不在方法的末尾,则返回值将是for循环的结果;在这种情况下,那是word_list数组本身:

irb(main):001:0> def count(words)
irb(main):002:1>   counts = Hash.new(0)
irb(main):003:1>   for word in words
irb(main):004:2>     counts[word] += 1
irb(main):005:2>   end
irb(main):006:1> end
#=> nil
irb(main):007:0> count %w[ sparky the cat sat on the mat ]
#=> ["sparky", "the", "cat", "sat", "on", "the", "mat"]

有人可能会在1.9中编写相同的方法:

def count_frequency(word_list)
  Hash.new(0).tap do |counts|
    word_list.each{ |word| counts[word]+=1 }
  end
end

虽然有些人会考虑使用tap这样的滥用行为。 :)

而且,为了好玩,这里有一个稍慢但纯粹功能的版本:

def count_frequency(word_list)
  Hash[ word_list.group_by(&:to_s).map{ |word,array| [word,array.length] } ]
end

答案 1 :(得分:4)

Ruby不要求您使用return语句返回方法中的值。如果省略显式return语句,将返回方法中计算的最后一行。

答案 2 :(得分:1)

它提供函数的返回值;它是如何将结果(存储在该变量中)传回给调用者(即最后的代码行)。在Ruby函数中计算的最后一个表达式用作返回值。 / p>

答案 3 :(得分:0)

Counts是一个字典,即它是值的键的关联映射。

在这种情况下,单词是键,值是出现次数。

字典从函数 count_frequency

返回