2017-02-17 74 views
0

我不明白为什么我们使用to_enum使扫描方法返回一个匹配数组本身时,字符串可枚举,在这种情况下要做什么to_enum?to_enum(:scan)vs单独扫描ruby中的正则表达式

这是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">] 

也有一些是我失踪,这里不理解...谁能解释一下吗?

感谢

回答

1

to_enum没有使串枚举,它实际上使String#scan一个懒惰的枚举。 enum_forto_enum的别名,这可能有助于澄清某些事情。 map每次产生一次扫描结果(延迟)到该块,该块使用Regexp类方法返回最近一次最近的匹配。这是一个非常人为的例子,你不可能在野外看到。

+0

好的,但我仍然不明白为什么当我们直接调用扫描字符串变量时,我们得到了相同的值,而不是使用to_enum相同的结果! –