object_id 个键(和其他一些对象)始终相同。这是为什么?
object_id of keys (and some other objects) are always the same. Why is that?
在每个 Ruby 程序中 Symbol
:x(其中 x 是允许用作 Symbol
名称的任何字符序列)具有相同的 object_id
.
false/true/nil也是一样。
我想知道 - 为什么会这样?这是否意味着每次 Ruby 在执行代码之前初始化所有这些对象(如 false/true/nil)? <--- 已在此处回答:How does object_id assignment work?
那么 Symbols
呢?这些也初始化了吗?数百万种可能的组合?他们的 .object_id 怎么可能在程序之间是相同的。
来自"The Book Of Ruby"
A symbol is, in fact, a pointer into the symbol table. The symbol
table is Ruby’s internal list of known identifiers – such as variable
and method names.
Symbol 作为键是有效的,因为不能有它的实例。这就像一个常数。
还值得注意的是,每个整数都将具有相同的 object_id
,而不是像 String 这样的类型。 Boolean
、FixNum
、nil
有相同的object_id
"Iamnotefficentasakey".object_id #=> Different here
"Iamnotefficentasakey".object_id #=> Different here
:iam.object_id #=> Same here
:iam.object_id #=> Same here
所以我在互联网上搜索并找到了这篇文章 http://threebrothers.org/brendan/blog/memory-and-ruby-symbols/ . I come to know that ruby process maintains a symbol table 只要进程存在,每个符号都有一个条目,所以每当创建一个新符号时 ruby 在该符号 table 如果不存在,它会为最后一个条目创建一个新符号,就像数据库 tables.
中的条目一样
更多可以提供帮助的资源:
Id2sym & symbol.object_id
在每个 Ruby 程序中 Symbol
:x(其中 x 是允许用作 Symbol
名称的任何字符序列)具有相同的 object_id
.
false/true/nil也是一样。
我想知道 - 为什么会这样?这是否意味着每次 Ruby 在执行代码之前初始化所有这些对象(如 false/true/nil)? <--- 已在此处回答:How does object_id assignment work?
那么 Symbols
呢?这些也初始化了吗?数百万种可能的组合?他们的 .object_id 怎么可能在程序之间是相同的。
来自"The Book Of Ruby"
A symbol is, in fact, a pointer into the symbol table. The symbol table is Ruby’s internal list of known identifiers – such as variable and method names.
Symbol 作为键是有效的,因为不能有它的实例。这就像一个常数。
还值得注意的是,每个整数都将具有相同的 object_id
,而不是像 String 这样的类型。 Boolean
、FixNum
、nil
有相同的object_id
"Iamnotefficentasakey".object_id #=> Different here
"Iamnotefficentasakey".object_id #=> Different here
:iam.object_id #=> Same here
:iam.object_id #=> Same here
所以我在互联网上搜索并找到了这篇文章 http://threebrothers.org/brendan/blog/memory-and-ruby-symbols/ . I come to know that ruby process maintains a symbol table 只要进程存在,每个符号都有一个条目,所以每当创建一个新符号时 ruby 在该符号 table 如果不存在,它会为最后一个条目创建一个新符号,就像数据库 tables.
中的条目一样更多可以提供帮助的资源:
Id2sym & symbol.object_id