为什么在需要之前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。