【问题标题】:Infinitesimal time in ruby红宝石中的无穷小时间
【发布时间】:2017-02-21 04:11:53
【问题描述】:

我有一个问题

我想比较两个时间对象,并希望始终在第一次通过比较:

def compare_time(时间) @memory_time ||= Time.new(1999,01,01) 如果时间 > @memory_time 提出“通过比较” 结尾 @memory_time = Time.now 结尾

我使用 Time.new(1999,01,01) 作为无穷小时间,但我认为语法(提示)很丑陋,并不总是有效。

所以我想知道是否有任何 CONSTANT 或其他更好的方法可以在 ruby​​ 中获得无限小的时间?

【问题讨论】:

  • 请解释您所说的无穷小时间是什么意思。我知道微积分中的表达式,它(通俗地说)意味着“无限接近零”,但这仅适用于时间间隔,而不适用于您似乎正在使用的时间点。
  • 我希望它比任何时间对象都小的无穷小时间,所以我可以让任何时间在我第一次调用函数时通过“time > @memory_time”
  • 这对我来说也没有多大意义。大多数计算机无法设置比 Unix Epoch 启动更早的时间,因此 Time.at 在这种情况下可能会派上用场。 Time.at(0) == 1970-01-01 00:00:00.
  • @joanbm,你是对的,它满足我的功能需要,你想在回答对话框中回复吗?
  • @joanbm:在 Ruby 中,您还可以使用带有负数的 Time.at 来表示纪元之前的日期。 Tsao 似乎在寻找一种方法来表示表示 负无穷大 的时间点,所以如果 Ruby 有一些东西来表示最小的整数,那么这可以解决问题 - 但 Ruby 没有。我建议 Tsao 手动计算自大爆炸以来的秒数,并用这个数字的负值定义一个常数。至少如果Hartle-Hawking 的假设是正确的,这就足够了。

标签: ruby time syntax


【解决方案1】:

出现此问题是因为 ruby​​ Time 与几分之一秒进行比较。我们可以使用 to_f 方法来查看 t1 和 t2 的区别:

def compare_time(time)
   @memory_time ||= Time.new(1999,01,01)
   if time.to_f > @memory_time.to_f
     puts "pass the compare"
   end
   @memory_time = Time.now
 end

我认为这个对你有帮助。

【讨论】:

    【解决方案2】:
    class Compare
    
      attr_accessor :memory_time
    
        def compare_time(time)
          unless @memory_time && (time < @memory_time)
            puts "pass the compare" 
          else
            puts "no pass the compare"
          end
          @memory_time = Time.now
        end
    
      end
    
    compare = Compare.new
    compare.compare_time(Time.new(1000,01,01)) #=> pass the compare
    compare.compare_time(Time.new(1000,01,01)) #=> no pass the compare
    compare.compare_time(Time.new(2018,01,01)) #=> pass the compare
    

    我找到了解决方案,代码总是第一次“通过比较”,当执行一次时,@memory_time 存在时间对象并与输入时间对象进行比较。

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      相关资源
      最近更新 更多