2013-03-27 84 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

相关问题