在浏览 ActiveRecord 源代码时我发现:
class ActiveRecord::Base
我不明白类名怎么会像ActiveRecord::Base
请帮我解释一下,我不明白这个概念。
最佳答案
ActiveRecord
实际上是一个 Ruby Module ,其最初定义类似于:
module ActiveRecord
# contents of module
end
模块为要定义的类和常量提供了命名空间,这意味着可以在模块内定义类,如 ActiveRecord::Base
那样。所以这与
module ActiveRecord
class Base
# contents of class
end
end
一般来说,::
运算符用于命名空间解析,用于引用命名空间内的常量。从技术上讲,任何以大写字母开头的变量都是常量,因此 Base
是一个常量,其值是类本身!如果在 ActiveRecord
中定义了一个名为 FOO
的常量,如下所示:
module ActiveRecord
FOO = "foo"
end
那么它的完全限定变量名称将为ActiveRecord::FOO
。
关于ruby-on-rails - 理解 ActiveRecord::基类名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653052/