如果您想要一个收集数组而不进行修改的方法,可以使用map
,并且您将拥有与each
相同的功能。例如,您可以这样做:
array.each do |x|
x += 10
print "#{x}"
end
但你可以轻松地做到这一点:
array.map{|x| print (x + 10).to_s}
它会有完全相同的结果。虽然each
只能这样做,但map
可以使用!
更改其功能,因此我不知道为什么我会再使用each
。如果each
似乎更具多样性,你能解释为什么我应该使用map
代替map
吗?
答案 0 :(得分:1)
否。使用each
进行副作用;使用map
进行(无副作用)转换。
虽然他们都迭代了可枚举(在某些时候 1 ),map
collects the transformed results 应该使用。要说map
是一个更强大的each
,就像说一个方法返回一个未使用的值比一个方法没有返回一个值更强大 - 它不是更强大,它&& #39;关于使用正确的工具。
因此,虽然map
可以"做" each
做什么(通过评估提供的块),做更多并且对于不同的任务有用:当需要转换而不是副作用时。在map
中执行副作用通常被认为是不好的做法(可能不包括映射对象的变异)。
1 此外, map
和each
不是严格可互换的。在懒惰与急切的情况下,像map
can be lazy while each
is only useful for side-effects and is never lazy这样的转变。 (each
不可能是懒惰的,因为没有结果序列来观察"并在以后强制进行评估。)