日期::今天没有定义?

为什么只有一些Date类的方法在没有显式的情况下加载:

require 'date' 

线?

例如:

 irb(main):002:0> Date.today NoMethodError: undefined method `today' for Date:Class from (irb):2 from /Users/mwlang/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `' 

然后…

 irb(main):003:0> require 'date' => true 

导致…

 irb(main):004:0> Date.today => # 

http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/Date.html上的文档似乎没有提供有关此行为的明确说明。 关于#irc的评论说它是一个stdlib而不是核心库,但是核心甚至没有定义Date类,并且使用-f(抑制读取.irbrc)启动irc以获得最小负载仍然会出现加载某种基础/核心日期类。

想要对正在发生的事情进行技术性解释,并对Ruby文档的引用进行解释,以便我从Ruby 1.8.7切换到Ruby 2.0.0时遇到其他类似的问题。

您看到的Date类是在lib / ruby​​gems / specification.rb中定义的,出于兼容性原因:

 # date.rb can't be loaded for `make install` due to miniruby # Date is needed for old gems that stored #date as Date instead of Time. class Date; end 

它是一个空类定义,它不提供任何方法或function。

如果在没有RubyGems的情况下启动IRB,那么Date类就会消失:

 $ ruby --disable-gems -S irb irb(main):001:0> Date NameError: uninitialized constant Date 

更新

在RubyGems 2.4.0中删除了空Date类:

  • RubyGems不再定义一个空的Date类。 由Benoit Daloze提出请求#948 。

补充@Stefan回答:

请注意,这已在rubygems的更高版本中删除。

  • 在这里更改日志
  • 合并请求在这里