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

Дата:: сегодня не определена?

Почему только некоторые методы класса Date загружаются без явного:

require 'date'

строка?

Например:

irb(main):002:0> Date.today
NoMethodError: undefined method `today' for Date:Class
from (irb):2
from /Users/mwlang/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'

И затем...

irb(main):003:0> require 'date'
=> true

приводит к...

irb(main):004:0> Date.today
=> #<Date: 2013-04-12 ((2456395j,0s,0n),+0s,2299161j)>

Документация на http://ruby-doc.org/stdlib-2.0/libdoc/date/rdoc/Date.html, похоже, не дает явного объяснения этого поведения. Комментарии к #irc говорят, что это stdlib, а не основная библиотека, но у ядра нет даже определенного класса Date и запускает irc с -f (подавлять чтение .irbrc), чтобы получить минимальную нагрузку, по-прежнему появляется загрузка какой-то базы/ядра Класс даты.

Хотелось бы получить техническое объяснение того, что происходит, и ссылки на документы Ruby, которые объясняют это, поэтому я понимаю, что для других таких встреч я переключаюсь с Ruby 1.8.7 на Ruby 2.0.0.

4b9b3361

Ответ 1

Класс Date, который вы видите, определяется в lib/rubygems/specification.rb по соображениям совместимости:

# date.rb can't be loaded for `make install` due to miniruby
# Date is needed for old gems that stored #date as Date instead of Time.
class Date; end

Это пустое определение класса и не предоставляет никаких методов или функциональных возможностей.

Если запуск IRB без RubyGems, этот класс Date ушел:

$ ruby --disable-gems -S irb
irb(main):001:0> Date
NameError: uninitialized constant Date

Update

Пустой класс Date был удален в RubyGems 2.4.0:

  • RubyGems больше не определяет пустой класс Date. Pull Request # 948 от Benoit Daloze.

Ответ 2

В дополнение к ответу @Stefan:

Обратите внимание, что это было удалено в более поздней версии rubygems.