在Web上查看我发现Ruby Time
类有Time#advance
。这记录在哪里?我没有在Ruby API文档here中看到它。
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.rb库文档中描述的Time类的扩展。”
它们是否意味着“time.rb库实现了对此类的扩展?”
我想也许这就是Time#advance来自的地方,但我找到的只是this。
答案 0 :(得分:6)
看起来advance
不是语言的核心部分,因此缺乏文档。看起来是rails包含的软件包的一部分,即ActiveSupport模块。
文档在这里: http://api.rubyonrails.org/classes/Time.html#method-i-advance
答案 1 :(得分:6)
它实际上在ActiveSupport::CoreExtensions::Numeric::Time
模块中。
这是我对Ruby的抱怨之一 - 无法为对象的每个方法找到全面的文档,因为方法列表会根据上下文而变化。强大而又刺激。
我正在开发一个我最初没写过的大型Rails应用程序,偶尔我会谷歌一个方法,我几分钟后才认识到这一点,然后才意识到......是的,之前的开发人员定义了它/ lib目录下。
答案 2 :(得分:3)
这有很多其他时间扩展,是ActiveSupport的一部分,你可能是Rails的一部分,虽然这个库本身就是完全可用的。
答案 3 :(得分:3)
这是第二个问题的答案。
在时间类的文档中,它首先说的是“实现time.rb库文档中描述的Time类的扩展。”
它们是否意味着“time.rb库实现了对此类的扩展?”
Time类在许多地方开放:
APIdock区分Ruby和Rails,但是当在一个项目中多次定义时,“组合”单个元素的RDoc。如果单个元素有多个RDoc(在本例中类似于Time类),则只显示其中一个,而其他元素则不显示。这可能令人困惑。
本文:
实现time.rb库文档中描述的Time类的扩展。
...来自lib / time.rb。它来自标准库,并扩展了核心库的Time类(在time.c中定义)。所以,你需要打电话......
require 'time'
...使用time.rb中定义的扩展名。否则,您只能使用time.c中定义的方法。