Что делает доходность в этой ситуации? - PullRequest
0 голосов
/ 08 августа 2011

Я читаю Программирование Ruby 1.9 (3-е издание): Прагматическое руководство для программистов , и у меня есть вопрос об одном из примеров кода.

На странице 101 есть этопример:

class VowelFinder
    include Enumerable
    def initialize(string)
        @string = string
    end
    def each
        @string.scan(/[aeiou]/) do |vowel|
            yield vowel
        end
    end
end

vf = VowelFinder.new("the quick brown fox jumped")
vf.inject(:+)   # =>    "euiooue"

В методе each каждый результат сопоставления из scan передается в блок, где вызывается yield.Но что именно делает строка yield vowel?Из того, что я понимаю, yield используется для вызова блока (который был передан методу) из метода.Что он делает в этой ситуации?

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Он вызывает блок, переданный методу, как вы понимаете.

0 голосов
/ 08 августа 2011

Возможно, стоит отметить, что это классическое использование Enumerable mix-in + each (которое должно давать желаемые элементы).Вам просто нужно реализовать each, и вы получите все классные методы (в вашем примере inject) перечислимых.См .:

http://www.ruby -doc.org / core / classes / Enumerable.html

"Миксин Enumerable предоставляет классы коллекций с несколькими обходами и поискомметоды, и с возможностью сортировки. Каждый класс должен предоставить метод, который возвращает последовательных членов коллекции. "

...