为什么我可以使用Date类而不需要' date'?

时间:2014-10-29 19:36:02

标签: ruby date time

我最近正在做一个exercism.io运动,以确定一个人的gigagsecond周年纪念,给她/他的生日。 If you want, you can nitpick me here

在做这个练习的时候,我发现如果我做了 require 'date',我会得到不同的结果。 enter image description here

vs使用require 'date'

enter image description here

此外,我在repl.it中尝试了同样的操作,如果我尝试使用Date而不使用require 'Date',则会出错。

enter image description here

我能够找到对“未初始化的常量”错误(Why is Ruby's Date class automatically loaded but DateTime is not?Why does Date exist in Ruby before it is required?)的一些回应。这导致我走上版本化的道路是罪魁祸首;但是,我找不到任何压倒一切的明确反应。

我正在使用:Ruby 2.1.3,irb 0.9.6(我相信使用Ruby 2.0.0)和repl.it正在使用Ruby 1.8.7(beta)。

那么,这是一个版本的东西吗? ...一个irb vs Ruby的东西? ...标准库中的Date类+ Date模块的东西?或者只是我只是一个n00b?

最后我用irb中的日期对象搞砸了一些并且收到错误'也许是IRB错误!'enter image description here

(FWIW,我在irb中为'时间'做了同样的事情,但这一次,无论我是否需要'时间',都得到相同的结果。) enter image description here

2 个答案:

答案 0 :(得分:1)

Rubygems(默认情况下是必需的)defines a empty, non-functioning Date class在早于2.4.0的版本中(Rubygems版本,而不是Ruby)。这是fixed recently(另见Ruby bug report)。带有修复程序的Rubygems版本可能会包含在Ruby 2.2中。

答案 1 :(得分:0)

这不是IRB问题。至少在Ruby 2.1中,require 'date'加载DateDateTime类。实际上,Date doc的第二行表示"' date'提供两个类Date和DateTime。"

档案t.rb

require 'date'
p DateTime.new(2014,01,01,01,01,01).to_time

Carys-MacBook-Pro:ruby_src Cary $ ruby​​" t.rb"

#=> 2013-12-31 17:01:01 -0800

它似乎也加载了Time类:

p Date.today.to_time.to_a.join(' ')
#=>  "0 0 0 29 10 2014 3 302 true PDT"

虽然我认为可能to_time加载Time。有人可以澄清这最后一​​点吗?