Где определен метод экземпляра each_with_index? - PullRequest
1 голос
/ 24 мая 2011

Я смотрю в Ruby 1.8.6 документах , и там нет упоминания 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.superclasss равно Object, а Object не реализует этот метод экземпляра.

Ответы [ 3 ]

6 голосов
/ 24 мая 2011

Он прибывает из Enumerable, модуля, который смешан с Hash.

Do 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]
2 голосов
/ 24 мая 2011

Он поставляется из модуля Enumerable, см. здесь .Концепция, стоящая за этим, называется mixins, что подробно объясняется здесь и здесь .

1 голос
/ 24 мая 2011
...