我不明白为什么我们要使用to_enum来使字符串成为可枚举的,而scan方法本身会返回一个匹配数组,在这种情况下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">]这里有一些我遗漏和不理解的东西。有谁能解释一下吗?
谢谢
发布于 2017-02-18 05:17:53
to_enum并没有让字符串成为可枚举的,它实际上让String#scan变成了一个懒惰的枚举器。enum_for是to_enum的别名,这可能有助于在某种程度上澄清这里的事情。map生成扫描的每个结果-每次一个(懒惰地)-to块,它使用last_match Regexp类方法返回最后一个、最近的匹配。这是一个你不太可能在野外看到的人造的例子。
https://stackoverflow.com/questions/42307342
复制相似问题