为什么在需要之前Ruby存在于Ruby中?

在Ruby中,我希望一个未被要求的类会引发“未初始化的常量”错误。 例如, CSV就是这种情况。

但是, Date表现得很奇怪:它是可用的,但显然不起作用,直到需要它为止。

 ~: irb >> Date.new(2012,7,24) ArgumentError: wrong number of arguments(3 for 0) >> require 'date' => true >> Date.new(2012,7,24) => # 

是什么解释了这种行为

我相信date不是来自irb ,而是来自rubygems ,特别是定义了Gem::Specification 的文件 :

 class Date; end # for ruby_code if date.rb wasn't required 

我相信他们需要定义任何 Date类,以便解释器不会在Specification类中进一步抱怨。

与此问题类似。 irb默认加载一个Date类,但Ruby本身不加载(尝试例如puts Date.new放在一个文件中)。

正如您所指出的,似乎irb加载的Date类与分发类不同。 此外,这只是Ruby 1.9中的情况 – 如果我在1.8中尝试它,我会在require之前和之后获得相同的类方法。

部分答案:似乎不完整的Date类来自irb,而不是来自ruby。