2013-11-23 66 views
0

有人使用了「摧毀一個類」這個詞,我懷疑它意味着什麼,決定做一個搜索,看起來摧毀類似乎是一個真正的概念,如How to properly destroy a class摧毀一個類是什麼意思

所示摧毀一個類是什麼意思?
我該如何銷燬Ruby中的類? (如果有意義的話)

+0

你不應該在促進階級戰爭。 –

回答

3

相當摧毀,你可能remove the constant。記住class(s)只是常數。

class C;end 
C.name # => "C" 

self.class.send(:remove_const,:C) 
C.name # uninitialized constant C (NameError) 

當你正在做class C;end,這意味着你正在創建Class(恆定分配)的實例,並指定該實例不斷C#remove_const方法實際上正在執行未分配,並返回Class實例,您可以將其分配給另一個常量。

class C 
    def self.foo 
    12 
    end 
end 

C.foo # => 12 
M = self.class.send(:remove_const,:C) 
M.foo # => 12 
C.foo # uninitialized constant C (NameError) 
1

要學習的最重要的規則是,在Ruby中,銷燬類與銷燬任何其他對象沒有什麼不同。通常,你有一些固定的類被分配給常量,永遠不會被銷燬。創建參數化子類是一個很好但相當不完善的練習,也是類Class的參數化子類,它可能在程序執行期間被破壞,就像任何其他對象一樣。銷燬本身是由垃圾收集器執行的,這通常與程序員無關。

注意:您鏈接到的文章沒有提到銷燬類,而是關於實例化和銷燬實例。

+0

但是類Class本身沒有類實例嗎? – user2422869

+0

是的,他們是。即使類「Class」本身也是類「Class」的一個實例,也就是它本身。 –