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

时间:2012-07-24 13:31:55

标签: ruby date

在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: 2012-07-24 ((2456133j,0s,0n),+0s,2299161j)>

是什么解释了这种行为?

3 个答案:

答案 0 :(得分:10)

我认为date不是来自irb,而是来自rubygems,特别是the file,其中Gem::Specification已定义:

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

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

答案 1 :(得分:5)

this question相似。 irb默认加载Date类,但Ruby本身不加载(例如在文件中尝试puts Date.new)。

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

答案 2 :(得分:3)

部分答案:似乎不完整的Date班级comes from irb, not from ruby.