2017-02-17 66 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相同的結果! –