Рубин:что делает префикс?
Я читал через источник хитрости и увидел:
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
строка:https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
Почему бы просто не сделать Net::HTTP вместо ::Net::HTTP, т. е., что это значит, когда вы используете :: как префикс?
3 ответа:
The
::- оператор разрешения области. То, что он делает, определяет, в какой области можно найти модуль. Например:module Music module Record # perhaps a copy of Abbey Road by The Beatles? end module EightTrack # like Gloria Gaynor, they will survive! end end module Record # for adding an item to the database endполучить доступ к
Music::Recordиз-заMusicможно использоватьMusic::Record.ссылка
Music::RecordСMusic::EightTrackвы могли бы просто использоватьRecordпотому что он определен в той же области (что иMusic).однако, чтобы получить доступ к
Recordмодуль, отвечающий за взаимодействие с базой данных отMusic::EightTrackвы не можете просто использоватьRecordпотому что Руби думает, что ты хочешьMusic::Record. Вот когда вы будете использовать оператор разрешения области в качестве префикса, указав глобальную / основную область:::Record.
module A def self.method; "Outer"; end end module B module A def self.method; "Inner"; end end A.method # => "Inner" ::A.method # => "Outer" endна конкретном случае искусственности, в строка 41 из файла, который вы показали определяется внутренний
Netмодуль. Чтобы сохранить доступ к внешнемуNetмодуль, он использует::Net.