Rubyの::ModuleName(コロンコロン)について

TL;DR

トップレベルの参照を確実にもたせたい時は ::

経緯

Okinawa.rbでRubyのモジュールを読んでいた所 ::ModuleName の様な書き方のモジュールが発見された

cf. https://github.com/intridea/hashie/blob/4070a699b039a1083971f698647d3707df4b03cc/lib/hashie/hash.rb#L14

cf. https://github.com/sisimai/rb-Sisimai/blob/master/lib/sisimai/string.rb#L49

これはどういう意味なんだろうと、はなちんさんやシーマンさん,Twitterでazumakuniyuki に聞いた所トップレベルの宣言の場合は利用するということがわかった。

たとえば以下のようなコードになるようです。

module Hoge
    module String
        p String
        p ::String
    end
end
~/w/R/Sample ❯❯❯ ruby colong.rb
Hoge::String
String

という訳で :: をつけると組み込みAPIなどのトップレベルで定義された物を利用できるようです