2009-03-06 3 views
8

Оглядываясь в Интернете, я обнаружил, что класс Ruby Time имеет Time#advance. Где это документировано? Я не упоминал об этом в документах Ruby API here.Где хранится Time.advance?

Функция поиска для документов API показала, что в любом месте нет метода, называемого «заранее».

Тем не менее, в IRB ...

>> t = Time.now 
=> Thu Mar 05 16:08:57 -0800 2009 
>> t.advance :months => 1 
=> Sun Apr 05 16:08:57 -0700 2009 

Другое дело, что меня озадачивает ... В Документах для класса времени, то первое, что он говорит, является «Реализует расширения для класса времени, которые описанных в документации для библиотеки time.rb. "

Они означают, что библиотека time.rb реализует расширения для этого класса?

Я подумал, может быть, это то, откуда наступил время #, но все, что я нашел, было this.

ответ

5

Это на самом деле в ActiveSupport::CoreExtensions::Numeric::Time модуле.

Это одна из моих проблем с Ruby - невозможно найти исчерпывающую документацию для каждого метода, который имеет объект, потому что список методов изменяется в зависимости от контекста. Мощный, но раздражающий.

Я работаю над большим Rails-приложением, которое я не писал изначально, и время от времени я google метод, который я не распознаю в течение нескольких минут, прежде чем осознать ... yep, предыдущий разработчик определил его в/lib.

+1

Для использования за пределами рельсов: в терминале: 'gem install activesupport', в x.rb:' require 'active_support/time'' –

3

Это, с большим количеством других расширений к времени, является частью ActiveSupport, которую вы, вероятно, приобрели как часть Rails, хотя библиотека полностью пригодна для использования сама по себе.

См documentation

6

Не похоже advance является основной частью языка, поэтому его отсутствие документации. Выглядит как часть пакета, входящего в состав рельсов, модуля ActiveSupport.

Документация находится здесь: http://api.rubyonrails.org/classes/Time.html#method-i-advance

+0

Это помогло! Спасибо! – lotif

3

Это ответ на ваш второй вопрос.

В документах для класса времени первое, что он говорит, «реализует расширения для класса времени, описанные в документации для библиотеки time.rb».

Они означают, что библиотека time.rb реализует расширения для этого класса?

Класс времени открыт во многих местах:

  • в Ruby:
    • time.c
    • Библиотека/date.rb
    • Библиотека/Новости/rss.rb
    • lib/time.гь
    • Библиотека/YAML/rubytypes.rb
  • в Rails:
    • ActiveSupport/Библиотека/ActiveSupport/ядро-вн/цифровая/time.rb

APIdock различает Ruby и Rails, но «объединяет» RDocs одного элемента, когда он определен несколько раз в одном проекте. Если для одного элемента есть несколько RDocs (например, класс Time), отображается только один из них, а другие - нет. Это может сбить с толку.

Этот текст:

Реализует расширения к классу времени, которые описаны в документации к библиотеке time.rb.

... происходит от lib/time.rb. Это из стандартной библиотеки и расширяет класс времени основной библиотеки (определенный в time.c). Итак, вам нужно позвонить ...

require 'time' 

... использовать расширения, определенные во времени.rb. В противном случае вы можете использовать только методы, определенные во времени.

Смежные вопросы