分配给常量的
Class
对象何时会被垃圾回收?例如class Foo; end Bar = Class.new {}
在匿名类/模块中声明的常量何时会被垃圾回收?例如
foo = Class.new do self::NAME = "Bar" end foo::NAME # Bar foo = nil GC.start
在上面的例子中,匿名类内部声明的常量
NAME
会被垃圾回收吗? (我假设匿名类将被垃圾收集..)
最佳答案
很容易将其归结为非常普遍的情况:如果一个对象不再有任何对它的引用,它就可以被垃圾收集。请注意,我说的是对象,而不是变量。变量不会被垃圾回收,对象会。
现在让我们看看你给出的例子:
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
中的值可以被垃圾回收,如果没有其他引用的话(即这个片段是完整的代码)。
关于ruby - 什么时候在 Ruby 中收集常量垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167694/