2008-12-01 46 views

回答

8

:: Base的是模塊的ActiveRecord類。模塊所做的一件事是在Ruby中提供命名空間。在Ruby中,您不會從模塊繼承,但可以使用include語句混合使用它。

我可以建議拿起Pickaxe的書或閱讀Why's (Poignant) Guide to Ruby

+0

邁克,感謝, 我真的需要拿起鎬,雙關語;-) – Valentin 2008-12-01 12:49:20

6

Ruby,::訪問靜態類或模塊常量。 ActiveRecord::Base指示ActiveRecord類或模塊有一個名爲Base的靜態內部類,您正在擴展。

編輯:麥克指出,在這種情況下ActiveRecord是一個模塊...

+0

ActiveRecord的定義爲Rails的一個模塊,http://github.com/rails/rails/tree/master/activerecord/lib/active_record/base.rb – 2008-12-01 12:43:42

4

::是一個一元運算符,它允許您訪問另一個類或模塊中定義的常量,模塊或類。它用於提供名稱空間,以便方法和類名不會與其他作者的其他類發生衝突。

當你看到的ActiveRecord :: Base的Rails中這意味着Rails中ActiveRecord::Base是這樣

module ActiveRecord 
    class Base 
    end 
end 

這意味着稱爲Base模塊ActiveRecord,然後裏面引用as ActiveRecord::Base

爲了更好地理解::運算符,只需從tutorialspoint.com去看這個例子:

MR_COUNT = 0  # constant defined on main Object class 
module Foo 
    MR_COUNT = 0 
    ::MR_COUNT = 1 # set global count to 1 
    MR_COUNT = 2  # set local count to 2 
end 
puts MR_COUNT  # this is the global constant 
puts Foo::MR_COUNT # this is the local "Foo" constant 
相關問題