实例方法“each_with_index”定义在哪里?

时间:2011-05-23 22:54:26

标签: ruby enumerable

我在查看Ruby 1.8.6 docs,并且没有提及each_with_index。 但是,如果我启动Ruby 1.8.7或1.9.2并运行以下命令,它可以工作:

h = {:a => 1, :b => 2.2}
h.each_with_index do |pair, i|
  p pair, i
end

each_with_index来自哪里? Hash.superclasssObjectObject未实现此实例方法。

3 个答案:

答案 0 :(得分:6)

它来自Enumerable,一个混入Hash的模块。

Hash.ancestors找到Enumerable。

Hash.ancestors => [Hash, Enumerable, Object, Kernel, BasicObject]
Enumerable.instance_methods.grep(/each/) # => [:each_with_index, :reverse_each, :each_slice, :each_cons, :each_with_object]

答案 1 :(得分:2)

它来自Enumerable模块,请参阅here。这背后的概念称为mixins,详细解释了herehere

答案 2 :(得分:1)