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将它们放在一个字符串中。
我无法理解的是每个方法中的块产量调用。据我所知,屈服需要一个工作块,我无法在任何地方看到。
答案 0 :(得分:1)
ruby doc告诉你它是如何工作的
可枚举
Enumerable mixin为集合类提供了多种遍历和搜索方法,并具有排序功能。该类必须提供每个方法,它产生集合的连续成员。如果使用Enumerable#max,#min或#sort,则集合中的对象还必须实现有意义的< =>运算符,因为这些方法依赖于集合成员之间的排序。
由于您的班级VowelFinder
包含Enumerable
,您必须使用each
来实施yield
,而Enumerable#inject
实施的其余部分将使inject(:+)
成为Enumerable
{1}}工作。
该块是inject
的实现细节,因此无法直接访问,但由www.domain.com/pools/show/12
调用创建。