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来ていると信じています:irbrubygemsGem::Specification

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

通訳がクラスのさらに下で文句を言わないように、クラスを定義する必要 があったと思います。DateSpecification

于 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から来ているようです。

于 2012-07-24T13:57:41.133 に答える