রুবি: :: উপসর্গ কি করে?


91

আমি আর্টিফিসের উত্সটি দিয়ে পড়ছিলাম এবং দেখেছিলাম:

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

লাইন: https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6

শুধু Net::HTTPপরিবর্তে কেন করবেন না ::Net::HTTP, অর্থাত্, যখন আপনি ::উপসর্গ হিসাবে ব্যবহার করেন তখন এর অর্থ কী ?


15
আমি "শীর্ষস্থানীয় কলোন" বাক্যাংশটি ব্যবহার করে এই বিষয়টির সন্ধান করেছি এবং প্রাথমিকভাবে এটি খুঁজে পাইনি; আশা করি এই মন্তব্যটি যে পরিবর্তন করবে। :)
নাথান লং

@ নাথানলং আকর্ষণীয় ধারণা। এটা কি কাজ করেছিল? ফিরে রিপোর্ট করুন।
দার্ট এগারিজিয়াস

উত্তর:


224

::সুযোগ রেজল্যুশন অপারেটর। এটি কী করে তা নির্ধারণ করে যে কোনও মডিউলের অধীনে কোন স্কোপ পাওয়া যাবে। উদাহরণ স্বরূপ:

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
হ্যাঁ, খুব ভাল উত্তর। ধন্যবাদ!
ma11 শেই 28

11
দুর্দান্ত উত্তর। এফওয়াইআই র্যান্ডম ডাউন ভোট নিয়ে চিন্তা করবেন না। জীবনের আরও অনেক অর্থপূর্ণ জিনিস রয়েছে।
ডারথ এগ্রিগিয়াস

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


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.