Hash是否重写Enumerable#map()?

时间:2011-12-18 06:29:41

标签: ruby enumerable

鉴于map()Enumerable定义,Hash#map yield两个变量如何阻止? Hash覆盖Enumerable#map()吗?

这是一个小例子,为了好玩:

ruby-1.9.2-p180 :001 > {"herp" => "derp"}.map{|k,v| k+v}
 => ["herpderp"] 

1 个答案:

答案 0 :(得分:16)

它不会覆盖地图

Hash.new.method(:map).owner # => Enumerable

它产生两个变量,这些变量被收集到一个数组中

class Nums
  include Enumerable

  def each
    yield 1
    yield 1, 2
    yield 3, 4, 5
  end
end

Nums.new.to_a # => [1, [1, 2], [3, 4, 5]]