2008-12-01 3 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, который вы распространяете.

Edit:, как Майк указывает, в этом случае 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 который затем ссылается как 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 
Смежные вопросы