为什么只有一些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 `<main>'
然后......
irb(main):003:0> require 'date'
=> true
导致......
irb(main):004:0> Date.today
=> #<Date: 2013-04-12 ((2456395j,0s,0n),+0s,2299161j)>
http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/Date.html处的文档似乎没有提供此行为的明确解释。关于#irc的评论说它是一个stdlib而不是核心库,但核心甚至没有定义Date类,并且启动irc和-f(抑制读取.irbrc)以获得最小负载仍然会出现加载某种基础/ core Date class。
想要对正在发生的事情进行技术性解释以及对解释这一点的Ruby文档的引用,以便在我从Ruby 1.8.7切换到Ruby 2.0.0时理解其他类似的遭遇。
答案 0 :(得分:9)
出于兼容性原因,您在lib/rubygems/specification.rb中定义了Date
类:
# 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
这是一个空类定义,它不提供任何方法或功能。
如果在没有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提取请求#948 Daloze。
答案 1 :(得分:1)