一位 StackOverflow 用户告诉我 Float
现在在 Ruby 中具有直接值(value)。但是,我对如何实现这一点感到困惑。
我也很困惑Symbol
s 可以立即产生值(value)。
据我所知,具有立即值的对象是其整个状态信息可以封装到 unsigned long
中的对象。 C 变量名为 VALUE
.
当考虑小整数( Fixnum
s)和像 true
这样的琐碎事情时,我可以直观地理解这是如何实现的。 false
nil
等等
但是,Float
没有长度限制和 Symbol
那么,这些对象如何在没有自己的结构的情况下表示?
最佳答案
首先,Float 有长度限制 - Float 基本上是 native double 浮点值,即 64 位。但这仍然太多了,因此仅当尾数不太大时 Float 才是立即值(您可以看到确切的条件 here )。
对于符号,有一个数据结构枚举所有创建的符号,因此它们可以被称为该表中的偏移量(在 ruby 2.2 上只有一些符号是这样的 - 那些不是“正常”的符号,垃圾收藏品)。
关于ruby - float 和符号如何具有直接值(value)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29333873/