【问题标题】:Why is the integer named Fixnum in ruby? [closed]为什么整数在 ruby​​ 中命名为 Fixnum? [关闭]
【发布时间】:2014-02-11 21:59:27
【问题描述】:

我想知道为什么 Ruby 将其命名为 Fixnum;其他语言将其命名为 Integer、Int、Number 等。我看到 Fixnum < IntegerBignum < IntegerInteger < NumericFloat < Numeric。我猜是因为尺寸:

1.class => Fixnum
(10**100).class => Bignum

来自the doc

保存可以用本机机器字表示的整数值(减 1 位)。如果对 Fixnum 的任何操作超出此范围,则该值会自动转换为 Bignum

为什么叫Fixnum?我想过固定数字,但它不是固定的,也不是固定大小的数字。

【问题讨论】:

  • 这个问题似乎离题了,因为它是关于语言设计背后的推理。
  • 应该移动到哪个堆栈交换?

标签: ruby history naming


【解决方案1】:

这不是 Ruby 提出的——术语“fixnum”来自 Lisp。就像在 Ruby 中一样,Lisp 中的 fixnum 是一个可以用机器整数表示的数字。虽然我从未见过证明我是对的主要来源,但我一直认为名称的“修复”部分指的是它只能表示固定范围的数字,与无限的 bignum 形成对比(以更差的性能为代价摆脱限制)。

【讨论】:

  • 我相信Fix实际上是指Fixnums是不可变的。每个整数值只有一个 Fixnum 实例,因此引用是“固定的”。
  • @Alex.Bullard:不过,我不相信 bignums 或任何其他类型的数字通常也是可变的。 bignums 最初是可变的还是什么?
  • @Alex.Bullard 数字是否不可变取决于 Ruby。如果这个词确实来自 Lisp,那么这不可能是术语“修复”的原因。
  • @Chuck 我可能错了,但我认为“固定”一词与“浮动”相对:无论小数点是否移动。我认为 fixnum 和 bignum 之间的对立是后来的。
  • @sawa:我最初发现这很难接受,因为 fixnums 总是整数而不是定点实数(根据我的经验,这通常是“定点”的含义),但是 Lisp 1.5手册似乎确实表明您是对的,使用“定点”来描述看似简单的整数。
【解决方案2】:

Integer 有 2 种孩子:

可以用本机机器字(减 1 位)表示的那些: 固定数字。 (查看小整数的 object_id。注意 a 图案?尝试一些其他对象、字符串、数组等等。那是 负 1 位的来源)。

还有那些太大的:Bignums(对于这些,object_id 只是 像其他非 Fixnums 一样。)

p 1.is_a?(Integer) #=> true
p (10**100).is_a?(Integer) #=> true

【讨论】:

    【解决方案3】:

    在 Ruby 中,它是一个具有直接值的对象。这基本上意味着传递的是对象而不是值。所以老实说,这只是对象的名称,而不是真正的类型。

    在此处阅读更多信息:http://www.ruby-doc.org/core-2.1.0/Fixnum.html

    【讨论】:

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