Дата:: сегодня не определена?
Почему только некоторые методы класса 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.
Ответы
Ответ 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.