1. ホーム
  2. ruby

[解決済み] Ruby: :: prefixは何をするものですか?

2023-02-08 15:12:08

質問

のソースを読んでいたのですが 人工物 を見ていて

module Artifice
  NET_HTTP = ::Net::HTTP
  # ...
end

の行になります。 https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6

なぜ Net::HTTP の代わりに ::Net::HTTP を使うのはどういう意味なのでしょうか? :: を接頭辞として使うのはどういうことでしょうか?

どのように解決するのですか?

この :: はスコープ解決演算子です。これはモジュールがどのようなスコープで見つけられるかを決定するものです。たとえば

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 .