2011-06-18 14 views
1

我寫(爲實驗:))代碼:元類在Ruby中

class A 
    class << self 
    def self.f 
     puts "f" 
    end 

    def getMetaclass 
     class << self 
     self 
     end 
    end 
    end 
end 

A.getMetaclass.f 

據我瞭解,元類有自己的元類。 Сorrect?

回答

3

在書"Metaprogramming Ruby" of Paolo Perrotta中,術語元類僅被提及一次,而更常使用術語「特徵類」。在你的例子中,A類的特徵類是元類,它有它自己的元類(不是元類)。所以我一直試圖擴大你的榜樣,它似乎是這條產業鏈永遠不會結束:

class Eigen 
    class << self 
    def getMetaclass 
     self 
    end 

    def getMetaMetaClass 
     class << self 
     self 
     end 
    end 

    def getMetaMetaMetaClass 
     class << self 
     class << self 
      self 
     end 
     end 
    end 

    end 
end 

if __FILE__ == $0 
    puts Eigen.getMetaclass 
    puts Eigen.getMetaMetaClass 
    puts Eigen.getMetaMetaMetaClass 
end 

這裏的結果是:

紅寶石eigen.rb

Eigen 
#<Class:Eigen> 
#<Class:#<Class:Eigen>> 

我只能看不到如何處理這樣的結構:-)

0

我讀過特徵類只有c當他們被要求時被重新提供。如果是這樣,那麼有可能有一個「海龜一路下來」的方法。