2011-04-29 68 views
4
def metaclass; class << self; self; end; end 

有人可以爲我解密這一行。我想它被擠進一個事實也沒有多大幫助。但是在兩天前開始看紅寶石,我擔心我可能會錯誤地將它分開。這個'元類'方法是做什麼的?

回答

7

打破它拆開:

def metaclass 
    class << self 
    self 
    end 
end 

注意,這是可作爲紅寶石1.9.2(Object#singleton_class)一個內置的方法。

這樣做是通過class << self打開並返回它(self)來返回對象的singleton_class/metaclass/eigenclass。如果你感到困惑元類本身,我建議下面的文章:

The Ruby Object Model - Structure and Semantics

+0

這是奇怪的是分號沒有方法名'metaclass'在有機磷農藥後,原來需要。 – sawa 2011-04-29 14:22:38

+1

@sawa你是什麼意思? 'irb> def metaclass class << self;自;結束; end#=> SyntaxError:(irb):1:語法錯誤,意外的keyword_class,期待';'或'\ n'' – Phrogz 2011-04-29 15:21:02

+0

@Progrog這就是我的意思。問題就是這樣,在你評論前7分鐘編輯。 – sawa 2011-04-29 15:25:40