我不明白为什么当scan方法本身返回一个匹配数组时,为什么我们使用to_enum来使字符串可枚举,在这种情况下to_enum做了什么?
这是带有to_enum的代码:
string = "The quick 12 brown foxes jumped over the 10 lazy dogs"
p string.to_enum(:scan, /\d+/).map {Regexp.last_match }
返回:
=> [#<MatchData "12">, #<MatchData "10">]
那么为什么我们在这里使用to_enum来使字符串在我们可以使用将返回数组的扫描时可枚举?
我也试过单独使用扫描,但得到了奇怪的结果:
p string.scan(/\d+/).map { Regexp.last_match}
=>[#<MatchData "10">, #<MatchData "10">]
我遗漏了一些东西而且在这里不理解......有人可以解释一下吗?
感谢
答案 0 :(得分:1)
to_enum
不会使字符串可枚举,它实际上使String#scan
成为一个懒惰的枚举器。 enum_for
是to_enum
的别名,可能有助于在此处澄清一些内容。 map
将每次扫描结果(懒惰地)产生到块中,该块使用last_match
Regexp类方法返回最后一次最近的匹配。这是一个非常人为的例子,你不可能在野外看到它。