我希望能够在Rails中比较Dates和Times,而无需始终调用to_time或to_date方法。所以我写了下面的代码:
class Date
def ==(other)
if other.kind_of?(Time)
self.to_time == other
else
super(other)
end
end
end
我知道有一种简单的方法可以写这个,这样我就可以使用>,<,> =,< =和< =>。但是我忘记了:P有什么想法吗?
答案 0 :(得分:5)
使任何旧Ruby类可比较的最简单方法是实现< =>实例方法并包含Comparable mixin。您将免费获得>,<,> =,< =,==等方法。
解决此问题的一种方法是将日期和时间类重新打开到include Comparable
并重新定义他们的<=>
方法,以便在必要时执行日期/时间转换(退回原始<=>
1}}定义否则)。
答案 1 :(得分:1)
答案 2 :(得分:0)
您的示例看起来没问题,但我不会使用kind_of?
- 如果other
未实现to_time
,您仍然会遇到异常!
更新:您正在寻找的可能是<=>
运营商!
答案 3 :(得分:0)
我相信你所要求的已经使用其他海报提到的比较运算符来实现。
(segfault@megumi)(01:35)% ./script/console
Loading development environment (Rails 2.2.0)
irb(main):001:0> a = Date.now
NoMethodError: private method `now' called for Date:Class
from (irb):1
from :0
irb(main):002:0> a = Date.today
=> Mon, 10 Nov 2008
irb(main):003:0> b = Time.today
=> Mon Nov 10 00:00:00 -0500 2008
irb(main):004:0> a == b
=> nil
irb(main):005:0> puts "a" if a == b
=> nil
irb(main):006:0> puts "a" if a != b
a
=> nil
irb(main):007:0>