gpt4 book ai didi

ruby-on-rails - 如何覆盖 Ruby Ranges 的 .. 和 ... 运算符以接受 Float::INFINITY?

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:59 25 4
gpt4 key购买 nike

我想覆盖 Ruby 的 Range 中的 ..... 运算符。

原因是,我正在处理数据库中的无限日期范围。如果您从 Postgres 中提取一个 infinty 日期时间,您将在 Ruby 中得到一个 Float::INFINITY

问题是,我不能使用 Float::INFINITY 作为范围的结束:

Date.today...Float::INFINITY
=> Wed, 02 Nov 2016...Infinity

DateTime.now...Float::INFINITY
# ArgumentError: bad value for range

Time.now...Float::INFINITY
# ArgumentError: bad value for range

...但我在代码中经常使用 ..... 语法。

甚至要能够构建范围,您需要改用 DateTime::Infinity.new:

Date.today...DateTime::Infinity.new
=> Wed, 02 Nov 2016...#<Date::Infinity:0x007fd82348c698 @d=1>

DateTime.now...DateTime::Infinity.new
=> Wed, 02 Nov 2016 12:57:07 +0000...#<Date::Infinity:0x007fd82348c698 @d=1>

Time.now...DateTime::Infinity.new
=> 2016-11-02 12:57:33 +0000...#<Date::Infinity:0x007fd82348c698 @d=1>

但我每次都需要进行 Float::INFINITY -> DateTime::Infinity.new 转换:

model.start_time...convert_infinity(model.end_time)

有没有一种方法可以覆盖 ..... 运算符,以便我可以合并转换函数并保留语法糖?

最佳答案

我不认为你想做的是解决此类问题的正确方法。

我建议的是简单地覆盖模型中的 end_date 方法:

def end_date
super == Float::INFINITY ? DateTime::Infinity.new : super
end

这基本上是说,如果数据库中的 end_dateFloat::INFINITY,则返回 DateTime::Infinity.new 作为 end_date,否则返回数据库中的内容。

关于ruby-on-rails - 如何覆盖 Ruby Ranges 的 .. 和 ... 运算符以接受 Float::INFINITY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40380603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com