2
未分配给任何变量/常量的对象立即消失(正常情况下)。在下文中,字符串"foo"
不受ObjectSpace.each_object(String)
在第三行捕获:收集不必分配给任何变量/常量的对象
strings = ObjectSpace.each_object(String).to_a
"foo"
ObjectSpace.each_object(String).to_a - strings # => []
是否有可能捕获未necessarly分配给任何变量/常量的变量/常量或部分对象?我对捕获字符串特别感兴趣。相关的域可以是文件或块。我期望如下所示:
capture_all_strings do
...
"a"
s = "b"
@s = "c"
@@s = "d"
S = "e"
%q{f}
...
end
# => ["a", "b", "c", "d", "e", "f"]
只是'ObjectSpace.each_object(String).to_a'返回什么? – dax
在这里有一个问题,字符串文字在编译时实例化。所以这就排除了一整套技巧,你可以通过修改'String.new'或类似的东西来将新对象添加到池中。 – amnn
即使对象被分配给一个变量,它也不会被ObjectSpace.each_object(String)所捕获(例如,如果将第一个示例中的第二行更改为'a =“foo”'),那么看起来似乎从你的问题,这不是预期的行为,是吗? –