2013-08-07 2 views
2

В irb я сделатьГде найти документы для некоторых методов массива?

a = [1, 2, 3] 
#=> [1, 2, 3] 
a.class 
#=> Array 
a.methods.sort 
#=> [:!, :!=, ..., :inject, ...] 

и получить, что a имеет метод inject, но в http://www.ruby-doc.org/core-2.0/Array.html я не могу найти документацию по inject. Зачем? Это ошибка в Ruby API?

И где я могу найти документацию по методу экземпляра массива inject?

+5

, когда вы новичок и найти что-то, что выглядит как ошибка, 99,9999% времени это не ... – tokland

+1

You правы! В следующий раз я буду осторожен ... –

+0

@tokland это очень хороший принцип в целом, но в некоторых IRID некоторые частные методы пока не отображаются на ruby-doc.org, даже если они используются в обычном Ruby. –

ответ

5

inject определяется в Enumerable, Array включает в себя этот модуль:

Array.included_modules 
#=> [Enumerable, Kernel] 

Списки API включены модули ниже списка методов.

Кстати, вы можете проверить метод, чтобы найти его происхождение:

Array.instance_method(:inject) 
#=> #<UnboundMethod: Array(Enumerable)#inject> 
#      ↑  ↑ 
#     Class Module 
+0

Спасибо. Очень полезно для меня! –

+1

Очень приятные интерпретации ... Понравилось это 'Array.instance_method (: inject)' .. Я собирался дать это .. но вы сделали..так я бы не ... :) –

+0

Последний вопрос: как знать, где включают любой метод класса (например, instance_method). Я делаю 'Array.public_class_method (: instance_method) => Array', но метод Array не :: :: метод экземпляра. Я также вижу в Kernel и Enumerable Modules - они также не имеют метода :: instance_method ... –