Подтвердить что ты не робот

Почему дата существует в 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: 2012-07-24 ((2456133j,0s,0n),+0s,2299161j)>

Что объясняет это поведение?

4b9b3361

Ответ 1

Я считаю, что date не исходит от irb, а от rubygems, а именно файла, где Gem::Specification определено:

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

Я считаю, что им нужен какой-либо класс date, чтобы интерпретатор не жаловался дальше в классе Specification.

Ответ 2

Как и этот вопрос. irb загружает класс Date по умолчанию, но сам Ruby не выполняет (попробуйте, например, puts Date.new в файле).

Кажется, что класс Date, который загружает irb, отличается от класса распределения, как вы указали. Более того, это похоже на Ruby 1.9 - если я попробую в 1.8, я получаю те же методы класса до и после требования.