Почему дата существует в 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)>
Что объясняет это поведение?
Ответы
Ответ 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, я получаю те же методы класса до и после требования.
Ответ 3
Частичный ответ: кажется, что неполный Date
класс поступает из irb, а не из ruby.