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(:+)
上面的代码扫描字符串中的元音,并使用inject将它们放在一个字符串中 .
我无法理解的是每个方法中的块产量调用 . 据我所知,屈服需要一个块来工作,我无法在任何地方看到 .
1 回答
ruby doc告诉你它是如何工作的
由于您的类
VowelFinder
包含Enumerable
,您必须使用yield
实现each
,而Enumerable#inject
实现的其余魔法将使inject(:+)
工作 .该块是
Enumerable
的实现细节,因此无法直接访问,但由inject
调用创建 .