रूबी: क्या करता है :: उपसर्ग करते हैं?


87

मैं आर्टिफ़िस के स्रोत के माध्यम से पढ़ रहा था और देखा:

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

पंक्ति: https://github.com/wycats/artifice/blob/master/lib/artifice.rn##6

सिर्फ इसके Net::HTTPबजाय ::Net::HTTP, यानी, जब आप ::उपसर्ग के रूप में उपयोग करते हैं तो इसका क्या मतलब है ?


15
मैंने "अग्रणी कॉलोन" वाक्यांश का उपयोग करके इस विषय की खोज की और शुरू में इसे नहीं पाया; उम्मीद है कि यह टिप्पणी बदल जाएगी। :)
नाथन लॉन्ग

@NathanLong दिलचस्प विचार। काम किया? कृपया रिपोर्ट करें।
डार्थ एलीगियस

जवाबों:


219

::गुंजाइश संकल्प ऑपरेटर है। यह क्या करता है यह निर्धारित करता है कि मॉड्यूल को किस दायरे में पाया जा सकता है। उदाहरण के लिए:

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:।


12
हां, बहुत गहन उत्तर। धन्यवाद!
ma11hew28

11
बहुत बढ़िया जवाब। FYI करें यादृच्छिक वोट के बारे में चिंता मत करो। जीवन में कहीं अधिक सार्थक चीजें हैं।
डार्थ एलीगियस

16
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


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.