`map`是否使用`each`或不使用?

Eri*_*man 6 ruby enumerable

在Ruby中,Enumerable模块混合到集合类中,并依赖于提供each方法的类,该方法生成集合中的每个项目.

好的,所以如果我想在我自己的类中使用Enumerable,我将只实现each[1]:

class Colors
  include Enumerable

  def each
    yield "red"
    yield "green"
    yield "blue"
  end
end

> c = Colors.new
> c.map { |i| i.reverse }
#=> ["der", "neerg", "eulb"]
Run Code Online (Sandbox Code Playgroud)

这按预期工作.

但是如果我each用Enumerable 覆盖现有类的方法,它不会破坏像map.为什么不?

class Array
  def each
    puts "Nothing here"
  end
end

> [1,2,3].each {|num| puts num }
#=> "Nothing here"
> [1,2,3].map {|num| num**2 }
#=> [1,4,9]
Run Code Online (Sandbox Code Playgroud)

[1]:来自http://www.sitepoint.com/guide-ruby-collections-iii-enumerable-enumerator/

sep*_*p2k 7

Enumerablemap确实使用的实现each,但没有什么能阻止扩展类使用自己的实现来覆盖它而不使用它each.

在这种情况下Array,map出于效率原因确实提供了自己的实现.