Floats 和 Symbols 如何具有即时价值?
How can Floats and Symbols have immediate value?
一位 Whosebug 用户告诉我,Float
s 现在在 Ruby 中具有直接价值。但是,我对这是如何实现的感到困惑。
我也很困惑 Symbol
s 如何具有即时价值。
我理解具有立即值的对象是可以将整个状态信息封装到名为 VALUE
.
的 unsigned long
C 变量中的对象
我可以直观地理解在考虑小整数(Fixnum
s)和诸如 true
false
nil
等微不足道的事情时这是如何可能的
但是,Float
和 Symbol
没有长度限制,如果没有自己的结构,这些对象如何表示?
首先,Float 有长度限制 - Float 基本上是本机双精度浮点值,即 64 位。但这仍然太多了,所以只有当尾数不太大时 Float 才是立即值(您可以看到确切的条件 here)。
至于符号,有一个数据结构枚举了所有创建的符号,所以它们可以被称为 table 的偏移量(在 ruby 2.2 上只有一些符号是这样的 - 那些不是 "normal",可收集的垃圾对象)。
一位 Whosebug 用户告诉我,Float
s 现在在 Ruby 中具有直接价值。但是,我对这是如何实现的感到困惑。
我也很困惑 Symbol
s 如何具有即时价值。
我理解具有立即值的对象是可以将整个状态信息封装到名为 VALUE
.
unsigned long
C 变量中的对象
我可以直观地理解在考虑小整数(Fixnum
s)和诸如 true
false
nil
等微不足道的事情时这是如何可能的
但是,Float
和 Symbol
没有长度限制,如果没有自己的结构,这些对象如何表示?
首先,Float 有长度限制 - Float 基本上是本机双精度浮点值,即 64 位。但这仍然太多了,所以只有当尾数不太大时 Float 才是立即值(您可以看到确切的条件 here)。
至于符号,有一个数据结构枚举了所有创建的符号,所以它们可以被称为 table 的偏移量(在 ruby 2.2 上只有一些符号是这样的 - 那些不是 "normal",可收集的垃圾对象)。