日期::今天没有定义?
为什么只有一些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 / rubygems / 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的更高版本中删除。
- 在这里更改日志
- 合并请求在这里