O ::
é o operador de resolução do escopo. O que ele faz é determinar em que escopo um módulo pode ser encontrado. Por exemplo:
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
Para acessar Music::Record
de fora de Music
você usaria Music::Record
.
Para fazer referência a Music::Record
partir de Music::EightTrack
você pode simplesmente usar Record
porque está definido no mesmo escopo (o de Music
).
Porém, para acessar o Record
módulo responsável pela interface com seu banco de dados Music::EightTrack
você não pode simplesmente usar Record
porque Ruby acha que você quer Music::Record
. Isso é quando você usar o operador de resolução de escopo como um prefixo, especificando o escopo global / main: ::Record
.