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

Nat*_*ong 23 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)>
Run Code Online (Sandbox Code Playgroud)

什么解释了这种行为?

Mla*_*vić 10

我相信,date不是来自irb,但rubygems,具体文件,其中Gem::Specification定义:

class Date; end # for ruby_code if date.rb wasn't required
Run Code Online (Sandbox Code Playgroud)

我相信他们需要定义任何 Date课程,以便口译员不会在Specification课堂上进一步抱怨.


Lar*_*off 5

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

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