23

在 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)>

什么解释了这种行为?

4

3 回答 3

10

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

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

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

于 2012-07-24T15:13:31.297 回答
5

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

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

于 2012-07-24T13:57:33.873 回答
3

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

于 2012-07-24T13:57:41.133 回答