2013-11-23 75 views
3
  1. 何時分配給常量的Class對象獲取垃圾回收?例如。什麼時候在Ruby中收集常量垃圾回收?

    class Foo; end 
    Bar = Class.new {} 
    
  2. 什麼時候在匿名類/模塊中聲明的常量得到垃圾回收?例如。

    foo = Class.new do 
        self::NAME = "Bar" 
    end 
    foo::NAME # Bar 
    foo = nil 
    GC.start 
    

    在上面的例子中,將聲明的恆定NAME匿名類內被垃圾收集? (我假設匿名類會被垃圾收集..)

+0

通過「when」,你真的想知道「什麼時候可以」嗎?回答第一個是依賴於許多其他變量,第二個不是。 –

+0

@AndrewMarshall在場景1中,我想知道它是否會被垃圾收集。在場景2中,我想知道在提交垃圾收集請求時是否收集了「NAME」常量。 –

回答

3

可以很容易地熬下來到非常一般的情況:如果對象不再有任何引用,它可以被垃圾收集。請注意,我說對象,而不是變量。變量不是垃圾收集,對象是。


現在,讓我們看看你給出的例子:

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的值可以是垃圾收集,如果有將它們的任何其它引用(即這個片段是完整的代碼)。