2013-03-27 87 views
2

在瀏覽ActiveRecord的源代碼,我發現:理解的ActiveRecord :: Base類名

class ActiveRecord::Base 

我不明白一類的名字可以是怎麼樣的ActiveRecord::Base 請解釋這對我來說,我沒有得到這個概念。

回答

5

ActiveRecord實際上是一個Ruby Module,其最初定義類似於:

module ActiveRecord 
    # contents of module 
end 

模塊爲類和常量一個命名空間被限定,這意味着類可以內部模塊進行定義,如ActiveRecord::Base是。因此,這是一樣的

module ActiveRecord 
    class Base 
    # contents of class 
    end 
end 

一般來說,::運營商用於命名空間分辨率,命名空間內引用的常量。從技術上講,任何以大寫字母開頭的變量都是一個常數,所以Base是一個常量,其值就是類本身!如果有一個叫常FOOActiveRecord定義如下:

module ActiveRecord 
    FOO = "foo" 
end 

那麼它的完全限定變量名稱將是ActiveRecord::FOO

+0

我想現在我明白了,我認爲這個類的ActiveRecord :: Base是openclass,對吧? – sunny1304 2013-03-27 06:42:00

+0

是的,「class ActiveRecord :: Base」是模塊ActiveRecord的縮寫;類Base「,它」打開「類,以便您可以在其中定義方法。 – 2013-03-27 06:43:56

+0

感謝您的幫助。 – sunny1304 2013-03-27 06:48:25

相關問題