为什么使用`1.0 / 0`而不是`Float :: INFINITY`?

时间:2013-06-16 07:12:02

标签: ruby infinity

我阅读了gem rom的代码,特别是已知优秀红宝石开发人员编写的子模块rom-relation。在rom-relation/lib/rom-relation.rb中,我们可以阅读:

#Represent a positive, infinitely large Float number
Infinity  = 1.0 / 0

但我没有看到使用Float::INFINITY

在irb,我试过了:

> 1.0/0 == Float::INFINITY
=> true
  • 为什么不使用Float::INFINITY
  • Infinity以大写开头,这是一个常量,但为什么不INFINITY? (即,这里使用什么惯例?)

2 个答案:

答案 0 :(得分:8)

Jon已经说过{1.9}引入了Float::INFINITY。因此,如果ROM使用此常量,则需要Ruby 1.9.2。

另一方面,

1.0/0适用于每个Ruby版本。

但是,您当然可以在代码中使用Float::INFINITY

ROM::Infinity == Float::INFINITY
#=> true

答案 1 :(得分:2)

也许代码是在引入Float::INFINITY之前编写的?它看起来像是在Ruby 1.9.2中引入的:1.9.1 docs1.9.2 docs。网上快速浏览表明Ruby是在2010年8月推出的。即使您正在查看的特定文件非常新,我怀疑代码是从旧的地方复制的。

(我不能评论命名。看看背景,那里已经有了混合物。)