问题 日期::今天没有定义?


为什么只有一些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文档的引用进行解释,以便我从Ruby 1.8.7切换到Ruby 2.0.0时遇到其他类似的问题。


1590
2018-04-12 13:59


起源

Date 是一个 stdlib Ruby。所以我们需要 include 如果我们想要使用它下面的任何方法。可能你的问题不明确。 - Arup Rakshit
那么哪个 date命令似乎没有明确的工作 require? - Roney Michael


答案:


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类。拉请求 #948 由Benoit   Daloze。

9
2018-04-12 14:58



感谢源参考和解释!谜团已揭开。 - Michael Lang
很棒的信息 - mko
多数民众赞成这是一个很好的解释! - Jikku Jose


补充@Stefan回答:

请注意,这已在rubygems的更高版本中删除。


1
2018-01-08 14:14