【发布时间】:2014-06-05 15:47:54
【问题描述】:
在 Mike H-R 和 Stefan 到 a question of mine 的 cmet 之后,我注意到 ObjectSpace.each_object(String) 包含了我能想到的任何字符串:
strings = ObjectSpace.each_object(String)
strings.include?("some random string") # => true
或
strings = ObjectSpace.each_object(String).to_a
strings.include?("some random string") # => true
我认为strings 应该只包含当时存在的字符串。为什么它几乎包含任何字符串?
然而,当我计算strings 的长度时,它返回一个有限的数字:
ObjectSpace.each_object(String).to_a.length # => 15780
这是在 Ruby 2.1.2p95(2014-05-08 修订版 45877)[x86_64-linux] 解释器和 irb 上观察到的。
这是否与 Ruby 2.1 中引入的冻结字符串文字优化有关?
【问题讨论】:
-
在引入
"some random string"之前运行strings = ObjectSpace.each_object(String).to_a导致false...
标签: ruby objectspace