2

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

class ActiveRecord::Base

我不明白一个类名是怎么回事ActiveRecord::Base 请为我解释一下,我不明白这个概念。

4

1 回答 1

5

ActiveRecord实际上是一个 Ruby Module,它最初的定义类似于:

module ActiveRecord
  # contents of module
end

模块为要在其中定义的类和常量提供命名空间,这意味着类可以按原样在模块内定义ActiveRecord::Base。所以这和

module ActiveRecord
  class Base
    # contents of class
  end
end

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

module ActiveRecord
  FOO = "foo"
end

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

于 2013-03-27T06:33:22.737 回答