gpt4 book ai didi

ruby - 为什么我不能在 Ruby 中实例化 Integer 类?

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:20 24 4
gpt4 key购买 nike

我认为 Ruby 中的所有类都可以实例化。是什么阻止了 Integer 类被 new 方法实例化?

Integer.new
# => NoMethodError: undefined method `new' for Integer:Class

最佳答案

其中有一些。除了Integer , Float , 和 Symbol ,您无法创建 TrueClass 的新实例, FalseClassNilClass也。

这些类(及其各自的实例)在 Ruby 中都是特殊的,并且在内部以特定方式处理。

例如,对于小整数,Ruby 会隐式处理它们。 Ruby 不是为每个整数创建一个新的“实际”Ruby 对象(这会非常浪费),而是将它们存储为仅由 object_id 表示的数值。因此,您在 Ruby 中观察到的 Integer 类的实例实际上是内存中的单个值(或多或少)。为了能够做到这一点,Ruby 保留所有奇数 object_id s 为整数值。因此,数字 1object_id3 , 号码 2object_id5等等……

由于 Ruby 语言本身的这种特殊处理,您无法创建新的 Integer 实例。现在,鉴于整数本身始终是不可变的(也就是说,它们不能更改),它们首先仅由其数值定义。

(请注意,这仅适用于小整数。对于较大的整数,根据您是在 32 位还是 64 位体系结构上运行,如果整数不符合方案,Ruby 仍会在内部创建真实对象如上所述。然而,这是由 Ruby 内部处理的,基本上是语言本身的一个实现细节。)

关于ruby - 为什么我不能在 Ruby 中实例化 Integer 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45693111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com