【问题标题】:Why can I use the Date class without requiring 'date'?为什么我可以使用 Date 类而不需要“日期”?
【发布时间】:2014-10-29 19:36:02
【问题描述】:

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

在做这个练习时,我在 irb 中发现如果我不这样做,我会得到不同的结果。notrequire 'date'

vs 使用require 'date'

此外,我在repl.it 中尝试了相同的方法,如果我尝试在没有require 'Date' 的情况下使用Date,则会出现错误。

我能够找到一些对“未初始化常量”错误(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(测试版)。

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

最后,我在 irb 中处理了一些日期对象,得到了一个错误“可能是 IRB 错误!”

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

【问题讨论】:

  • 我在 Ruby 1.9.3(不是 IRB)中得到一个 not found 错误,但它在 Ruby 2.0.0-p0(不是 IRB)中有效
  • 不要粘贴屏幕截图,而是输入代码。很难看到。我们会判断你是一个懒惰的人。
  • ...并且更难复制以进行测试。

标签: ruby date time


【解决方案1】:

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

【讨论】:

  • 谢谢@matt!我updated my version of Rubygems 到最新版本 2.4.2。并在没有require 'date'的irb中测试:2.1.3 :001 > date = Date.newNameError: uninitialized constant Date ...和:2.1.3 :002 > require 'date' => true2.1.3 :003 > date = Date.new => #<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)>
【解决方案2】:

这不是 IRB 问题。至少在 Ruby 2.1 中,require 'date' 会同时加载 DateDateTime 类。事实上,Date 文档的第二行指出,“'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。有人可以澄清最后一点吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2014-06-30
    • 2014-09-24
    • 2021-11-11
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多