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
答案 0 :(得分:2)
正如Marek Lipka所指出的(在评论部分),
这是因为Ruby 2.0有一个空的Date类用于兼容性 原因。