地图只是每个都更强大吗?

时间:2014-05-29 05:08:22

标签: ruby

如果您想要一个收集数组而不进行修改的方法,可以使用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吗?

1 个答案:

答案 0 :(得分:1)

否。使用each进行副作用;使用map进行(无副作用)转换。

虽然他们都迭代了可枚举(在某些时候 1 ),map collects the transformed results 应该使用。要说map是一个更强大的each,就像说一个方法返回一个未使用的值比一个方法没有返回一个值更强大 - 它不是更强大,它&& #39;关于使用正确的工具。

因此,虽然map可以"做" each做什么(通过评估提供的块),做更多并且对于不同的任务有用:当需要转换而不是副作用时。在map中执行副作用通常被认为是不好的做法(可能不包括映射对象的变异)。

1 此外, mapeach不是严格可互换的。在懒惰与急切的情况下,像map can be lazy while each is only useful for side-effects and is never lazy这样的转变。 (each不可能是懒惰的,因为没有结果序列来观察"并在以后强制进行评估。)