比较日期时间时,ruby 1.8.7和1.9.2日期范围之间不一致

比较日期时间时,ruby 1.8.7和1.9.2日期范围之间不一致,ruby,Ruby,Ruby 1.8.7: > r = (Date.civil(2010, 12, 1)..Date.civil(2010, 12, 31)) > r.include? DateTime.civil(2010,12,28,15,0) => true Ruby 1.9.2 > r = (Date.civil(2010, 12, 1)..Date.civil(2010, 12, 31)) > r.include? DateTime.civil(2010,12,28,15,

Ruby 1.8.7:

> r = (Date.civil(2010, 12, 1)..Date.civil(2010, 12, 31))
> r.include? DateTime.civil(2010,12,28,15,0)
=> true
Ruby 1.9.2

> r = (Date.civil(2010, 12, 1)..Date.civil(2010, 12, 31))
> r.include? DateTime.civil(2010,12,28,15,0)
=> false

有人知道这是为什么吗?我非常喜欢1.8.7行为,这种不一致性打破了我的一些代码:(

Range
Ruby 1.9中的对象行为不同。以前,
Range#include?
实际上只是做了一个大于/小于的比较。但是,现在,它迭代范围中的每个项目(在本例中是日期),并将您的值与每个值进行比较

Ruby 1.9添加了
Range\cover?
,其作用类似于
Range\include?
的1.8版本,但是它与Ruby 1.8不向后兼容

> r.cover? DateTime.civil(2010,12,28,15,0)
=> true

更多信息:

Range
对象在Ruby 1.9中的行为有所不同。以前,
Range\include?
实际上只是进行了大于/小于比较。但是,现在,它迭代范围中的每个项目(在本例中为日期),并将您的值与每个项目进行比较

Ruby 1.9添加了
Range\cover?
,其作用类似于
Range\include?
的1.8版本,但是它与Ruby 1.8不向后兼容

> r.cover? DateTime.civil(2010,12,28,15,0)
=> true
更多信息: