日期类在Ruby 2.0中行为不端

时间:2015-08-12 08:21:21

标签: ruby

Ruby版本:ruby 2.0.0p247 (2013-06-27) [x64-mingw32]

为什么下面的代码能够创建Date对象但无法在其上调用有效方法?

代码版本1

p d = Date.new  # Works fine - Prints - #<Date:0x000000027aa628>
p Date.gregorian_leap?(2016) # undefined method `gregorian_leap?' for Date:Class (NoMethodError)

代码版本2 如果我们添加require语句

,上面的代码可以正常工作
require 'date'
p d = Date.new  # Prints #<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)>
p Date.gregorian_leap?(2016) # Prints true

哪个Date类正在上面的版本1中实例化? Ruby是否具有完全限定类名的概念,我们可以检查以找出两种情况的区别?

Ruby版本:ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]

Ruby 2.2中,Date.new提前失败 - 不像Ruby 2.0那样行为错误

p d = Date.new # uninitialized constant Date (NameError)
p Date.gregorian_leap?(2016) # did not reach here, previous line errored out

1 个答案:

答案 0 :(得分:2)

正如Marek Lipka所指出的(在评论部分),

  

这是因为Ruby 2.0有一个空的Date类用于兼容性   原因。

     

参考:bugs.ruby-lang.org/issues/9890