在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)>
是什么解释了这种行为?
答案 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.