了解ActiveRecord :: Base类名

sun*_*304 2 ruby activerecord ruby-on-rails

在浏览ActiveRecord源代码时,我发现:

class ActiveRecord::Base
Run Code Online (Sandbox Code Playgroud)

我不明白课程名称是怎么样的.ActiveRecord::Base 请为我解释,我没有得到这个概念.

Stu*_*t M 5

ActiveRecord实际上是一个Ruby 模块,最初定义类似于:

module ActiveRecord
  # contents of module
end
Run Code Online (Sandbox Code Playgroud)

模块为要定义的类和常量提供名称空间,这意味着可以在模块内定义类,也可以ActiveRecord::Base.所以这是一样的

module ActiveRecord
  class Base
    # contents of class
  end
end
Run Code Online (Sandbox Code Playgroud)

通常,::运算符用于命名空间解析,用于引用命名空间内的常量.从技术上讲,任何以大写字母开头的变量都是常量,因此Base是一个常量,其值是类本身!如果有一个常量命名FOO定义ActiveRecord如下:

module ActiveRecord
  FOO = "foo"
end
Run Code Online (Sandbox Code Playgroud)

那么它的完全限定变量名称就是ActiveRecord::FOO.