Floats和Symbols如何立即具有价值?

时间:2015-03-29 19:39:13

标签: ruby unsigned-integer

StackOverflow用户告诉我Float现在在Ruby中具有直接价值。但是,我对这是如何实现感到困惑。

我也对Symbol如何具有直接价值感到困惑。

我理解具有直接值的对象是可以将整个状态信息封装到名为unsigned long的{​​{1}} C变量中的对象。

我可以直观地理解在考虑小整数(VALUE s)和Fixnum true false等等琐碎的事情时如何做到这一点。

但是,对nilFloat s没有长度限制,如何在没有自己的结构的情况下表示这些对象?

1 个答案:

答案 0 :(得分:3)

首先,Float执行长度限制 - Float基本上是本机双精度浮点值,即64位。但这仍然太多了,所以只有当尾数不是太大时才能看到浮点数(你可以看到确切的条件here)。

对于符号,有一个数据结构枚举所有创建的符号,因此它们可以被称为该表的偏移量(在ruby 2.2上,只有一些符号是这样的 - 那些不是' t" ;普通",垃圾收集物品。)