Enumerable#each和之间的区别在于Enumerable#map它是返回接收器还是映射结果.再回到接收器是微不足道的,你通常不需要继续后一种方法链each一样each{...}.another_method(我可能从来没有见过这样的情况下,即使你想回接收器,你可以做到这一点tap).所以我认为使用的所有或大多数情况Enumerable#each都可以替换为Enumerable#map.我错了吗?如果我是对的,目的是each什么?是map慢each?
编辑:我知道each当你对返回值不感兴趣时,有一种常见的做法.我对这种做法是否存在并不感兴趣,但我对这种做法是否有意义感兴趣,而不是从惯例的角度来看.
map和之间的区别each比一个返回一个新数组而另一个没有返回更重要.重要的区别在于他们如何传达您的意图.
当你使用时each,你的代码说"我正在为每个元素做点什么." 当你使用时map,你的代码说"我正在通过转换每个元素来创建一个新的数组."
因此,虽然你可以使用map代替each,尽管性能,代码现在会对任何人阅读它的意图撒谎.
选择map或each应由所需的最终结果决定:新阵列还是没有新阵列.结果map 可能是巨大的和/或愚蠢的:
p ("aaaa".."zzzz").map{|word| puts word} #huge and useless array of nil's
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |