分配给常量的Class
对象什么时候收集垃圾? E.g。
class Foo; end
Bar = Class.new {}
什么时候在匿名类/模块中声明的常量会被垃圾收集? E.g。
foo = Class.new do
self::NAME = "Bar"
end
foo::NAME # Bar
foo = nil
GC.start
在上面的示例中,匿名类中声明的常量NAME
是否会被垃圾回收? (我假设匿名类将被垃圾收集..)
答案 0 :(得分:5)
很容易将其归结为一般情况:如果一个对象不再有任何引用,它可以被垃圾收集。请注意,我说 object ,而不是变量。变量不是垃圾收集,对象是。
现在让我们看看你给出的例子:
class Foo; end
Bar = Class.new {}
Class
的实例只有在分配给它们的常量(如果有的话)被重新分配给不同的值(例如Bar = nil
)并且没有该类的实例时才会被垃圾收集。没有继承自它的类。
foo = Class.new do
self::NAME = "Bar"
end
foo::NAME # Bar
foo = nil
foo
&如果没有其他引用,则可以对foo::NAME
进行垃圾回收(即此代码段是完整代码)。