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


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.