在这种情况下,收益率是多少?

时间:2011-08-08 04:43:47

标签: ruby block

我正在阅读Programming Ruby 1.9 (3rd edition): The Pragmatic Programmers' Guide,并对其中一个代码示例提出疑问。

在页面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 个答案:

答案 0 :(得分:1)

正如你所理解的那样,它正在调用传递给方法的块。

答案 1 :(得分:0)

值得注意的是,这是Enumerable混合+ each(必须产生所需元素)的经典用法。你只需要实现each,你就可以得到所有很酷的方法(在你的例子中,inject)。参见:

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

“Enumerable mixin为集合类提供了多种遍历和搜索方法,并具有排序功能。该类必须提供一个方法,每个方法都会产生集合的连续成员。”