12

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 クラスが定義されておらず、最小限の負荷を得るために -f (.irbrc の読み取りを抑制) を指定して irc を起動すると、何らかのベース/コアが読み込まれるように見えます。デートクラス。

Ruby 1.8.7 から Ruby 2.0.0 に切り替える際に発生する他の問題について理解できるように、何が起こっているのかについての技術的な説明と、これを説明している Ruby ドキュメントへの参照が必要です。

4

2 に答える 2

10

表示されている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

これは空のクラス定義であり、メソッドや機能を提供しません。

RubyGems なしで IRB を開始すると、その Date クラスはなくなります。

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

アップデート

空のDateクラスはRubyGems 2.4.0で削除されました:

  • RubyGems は空の Date クラスを定義しなくなりました。Benoit Daloze によるプルリクエスト#948 。
于 2013-04-12T14:58:14.630 に答える