【问题标题】:Why is `1.0 / 0` used instead of `Float::INFINITY`? [closed]为什么使用 1.0 / 0 而不是 Float::INFINITY? [关闭]
【发布时间】:2013-06-16 07:12:02
【问题描述】:

我阅读了 gem rom 的代码,特别是它的子模块 rom-relation 由知名的优秀 ruby​​ 开发人员编写。在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? (即,这里使用什么约定?)

【问题讨论】:

  • INFINITY 以大写字母开头。
  • 如果我说我的母语不是英语,所以我没有掌握所有的英语,我可以原谅吗?
  • 为什么会有如此多的反对票?这是一个合理的问题。
  • @Stefan:嗯,很难给出一个客观、明确的答案——除了作者之外,没有人能真正说出他们为什么要这么做。这可以解释票数接近的原因。

标签: ruby infinity


【解决方案1】:

Jon 已经说过 Float::INFINITY 是在 Ruby 1.9.2 中引入的。因此,如果 ROM 使用此常量,则需要 Ruby 1.9.2。

另一方面,1.0/0 适用于每个 Ruby 版本。

不过,您当然可以在代码中使用Float::INFINITY

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

【讨论】:

    【解决方案2】:

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

    (我无法对命名发表评论。看看上下文,那里已经混合了。)

    【讨论】:

    • 使用 git 我可以看到部分代码是 作者:Piotr Solnica 日期:Tue Jun 4 19:34:46 2013 +0200 我不敢相信它是在 2010 年 8 月之前写的。
    • @Hettomei:正如我在回答中所说,我怀疑它是从某个旧地方复制的。为什么你不相信那句话是在 2010 年 8 月之前写的? Ruby 已经存在很长时间了,人们经常将一些代码从一个地方复制到另一个地方。
    • 可能是代码试图保持向后兼容,或者作者没有意识到添加了Float::INFINITY,并坚持使用他知道的技巧。
    • @MartijnPieters:确实 - 后者在我看来更有可能,除非 Ruby pre-1.9.2 在野外仍然很常见。
    • 不确定 Ruby 生态系统,但许多 Python 库开发人员仍然支持 Python 2.6; 2.7 于 2010 年 7 月发布。许多 LTS Linux 发行版仍然捆绑 2.6。大概 Ruby 面临着同样的情况,很可能对 per-1.9.2 的支持仍然有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    相关资源
    最近更新 更多