This question already has answers here:
What is the difference between Integer and Fixnum?

(2 个回答)


5年前关闭。




它们看起来是等价的,但是当比较它们时,它是错误的:
5.is_a? Fixnum
# => true
5.is_a? Numeric
# => true
Numeric == Fixnum
# => false

最佳答案

数字

Numeric 是所有更高级别的数字类都应该继承的类。

Numeric 允许实例化堆分配的对象。其他核心数字类如 Integer 被实现为立即数,这意味着每个 Integer 是一个始终按值传递的单个不可变对象(immutable对象)。

FIXNUM

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

Fixnum 对象具有直接值(value)。这意味着当它们被分配或作为参数传递时,传递的是实际对象,而不是对该对象的引用。

注意: 每个 Fixnum 都是 Numeric 但每个 Numeric 都不是 Fixnum。

更新: Ruby 2.4 将 fixnum 和 bignum 统一为整数。

关于ruby-on-rails - Fixnum 和 Numeric 有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35547675/

10-09 02:00