2009-03-06 149 views
8

環顧網上,我發現紅寶石Time類有Time#advance。這在哪裏記錄?我在Ruby API文檔here中沒有看到它。Time.advance在哪裏記錄?

API文檔的搜索功能表明在任何地方都沒有稱爲「advance」的方法。

儘管如此,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類是在time.rb庫的文檔中有描述。「

他們的意思是「time.rb庫實現了對這個類的擴展嗎?」

我想也許這是時間#提前來自但我發現所有是this

回答

5

這實際上是ActiveSupport::CoreExtensions::Numeric::Time模塊中。

這是我對Ruby的一種抱怨 - 無法找到對象具有的每種方法的全面文檔,因爲方法列表根據上下文而變化。強大,但惱人。

我正在研究一個我最初沒有寫的大型Rails應用程序,並且曾經有一段時間我google了一個方法,在實現前幾分鐘我不認識...是的,之前的開發人員定義了它在/ lib中。

+1

在rails外部使用:在終端:`gem install activesupport`,在x.rb:`require'active_support/time'` – 2016-02-08 18:33:43

3

這個包含許多其他Time對象的擴展,它是ActiveSupport的一部分,您可能已經將它作爲Rails的一部分獲得,儘管該庫本身是完全可用的。

documentation

3

這是你的第二個問題的答案。

在時間類的文檔中,它所說的第一件事是「在time.rb庫的文檔中描述的實現Time類的擴展」。

他們的意思是「time.rb庫實現了對這個類的擴展嗎?」

  • 在Ruby中:
    • time.c
    • 的lib/date.rb
    • 的lib/RSS/rss.rb

的時間類在很多地方開

  • lib/time。RB
  • LIB/YAML/ruby​​types.rb
  • Rails中
    • 的ActiveSupport/LIB /的ActiveSupport /芯-EXT /數字/ time.rb
  • APIdock區分Ruby和Rails,但是在一個項目中多次定義單個元素的RDoc時會「合併」RDoc。如果單個元素有多個RDoc(如本例中的Time類),則只顯示其中一個元素,其他元素不顯示。這可能會讓人困惑。

    這樣的文字:

    實現了擴展,對於time.rb庫中的文檔中描述的時間類。

    ...來自lib/time.rb。它來自標準庫並擴展了核心庫的Time類(在time.c中定義)。因此,您需要致電...

    require 'time' 
    

    ...使用time.rb中定義的擴展名。否則,你只能使用time.c中定義的方法。