2009-03-06 65 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中定义的方法。