Какой цели служит счет? Линия 7 - PullRequest
3 голосов
/ 22 ноября 2011

Мне интересно, для какой цели служит переменная count, та, которая находится прямо перед последним концом?

# 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 ]

8 голосов
/ 22 ноября 2011

Последнее выражение в любом методе 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
4 голосов
/ 22 ноября 2011

Ruby не требует от вас использования оператора return для возврата значения в метод. Последняя строка, оцененная в методе, будет возвращена, если опущен явный оператор return.

1 голос
/ 22 ноября 2011

Предоставляет возвращаемое значение для функции; именно так результат (который хранится в этой переменной) передается обратно вызывающей стороне (то есть строке кода в конце). Последнее выражение, вычисленное в функции Ruby, используется в качестве возвращаемого значения.

0 голосов
/ 22 ноября 2011

Счетчик - это словарь, т. Е. Ассоциативная карта ключей к значениям.

В этом случае слова являются ключами, значения - числом вхождений.

Словарь возвращается из функции count_frequency

...