समानता का अर्थ है कि दो चीजें समान हैं। रूबी में, हम वस्तुओं और उनके मूल्यों की तुलना यह पता लगाने के लिए करते हैं कि क्या वे एक ही वस्तु हैं।
सवाल यह है...
आप रूबी में दो चीजों की तुलना कैसे करते हैं?
इसे पसंद करें :
1 == 1 # true
आप शायद इससे पहले से ही परिचित हैं...
लेकिन क्या आप जानते हैं कि == एक विधि है और सिर्फ वाक्य रचना नहीं है?
प्रभाव बड़े हैं।
आप इस पद्धति को अपनी कक्षाओं में अधिक शक्तिशाली बनाने के लिए लागू कर सकते हैं। और यही आप इस पोस्ट में सीखेंगे!
क्या दो वस्तुओं को समान बनाता है?
आप दो स्ट्रिंग्स की तुलना इस तरह कर सकते हैं:
"foo" == "foo"
यदि शब्द और वर्ण वही हैं, तो वे बराबर हैं।
व्यंजक true लौटाता है ।
यह काम करता है क्योंकि String वर्ग एक == लागू करता है (दो समान चिह्न) विधि जो तार की तुलना करना जानती है।
लेकिन क्या होगा अगर String लागू नहीं किया == ?
तब रूबी Object का उपयोग करेगी का कार्यान्वयन == , जो वस्तु सामग्री के बजाय वस्तु पहचान के परीक्षण के लिए डिफ़ॉल्ट है।
उदाहरण :
Object.new == Object.new # false String.new == String.new # true
कारण Object रिटर्न false ऐसा इसलिए है क्योंकि दो नई वस्तुओं में अलग-अलग ऑब्जेक्ट आईडी हैं।
String . के मामले में , चूंकि यह सामग्री के आधार पर तुलना करता है, और दो नए स्ट्रिंग्स में समान सामग्री होती है (वे खाली हैं) यह true लौटाता है ।
समानता लागू करना
आइए अब आपने जो सीखा है उसका उपयोग करके अपनी कक्षाओं की तुलना करके उन्हें अधिक शक्तिशाली बनाएं।
== . के लिए धन्यवाद विधि…
आप ठीक से परिभाषित कर सकते हैं कि आपकी अपनी कक्षा के दो उदाहरणों के बराबर होने का क्या अर्थ है।
उदाहरण :
class Product
attr_reader :name, :price
def initialize(name, price)
@name, @price = name, price
end
def ==(other)
self.name == other.name &&
self.price == other.price
end
end
p1 = Product.new('book', 49)
p2 = Product.new('book', 49)
p1 == p2 # true
== विधि कहती है कि दो Product . के लिए नाम और कीमत दोनों समान होनी चाहिए वस्तुओं को समान माना जाना चाहिए।
याद रखें :
यदि आप इस पद्धति को लागू नहीं करते हैं (या Comparable . का उपयोग करें मॉड्यूल, जिसे मैं अपनी रूबी पुस्तक में समझाता हूं) दो वस्तुओं की तुलना उनके मूल्यों के बजाय उनके ऑब्जेक्ट आईडी का उपयोग करके की जाएगी।
मुझे यह भी उल्लेख करना चाहिए कि यदि आप एक स्ट्रक्चर का उपयोग करते हैं तो यह पहले से ही लागू होता है == आपके लिए।
ट्रिपल इक्वल्स के बारे में क्या?
आप सोच रहे होंगे कि क्या == एक विधि है, है === एक तरीका भी? और इसका उत्तर है हां 🙂
तो दोनों में क्या अंतर है?
जावास्क्रिप्ट में एक स्पष्ट अंतर है, जहां == यदि वे नहीं हैं तो ऑब्जेक्ट प्रकारों को समान रूप में बदलने का प्रयास करेंगे (1 बनाम '1' ) और === 'सख्त' समानता के लिए है।
लेकिन रूबी में ऐसा कुछ नहीं है। क्या === साधन इसे लागू करने वाले वर्ग पर निर्भर करता है।
कई मामलों में यह == . के लिए सिर्फ एक उपनाम है ।
जैसे String और Object ।
यहां अंतर्निहित कक्षाओं की एक तालिका है जो === give देती है एक विशेष अर्थ:
| Class | अर्थ |
|---|---|
| रेंज | यदि obj श्रेणी का एक अवयव है, तो सही है, अन्यथा गलत है। |
| Regexp | एक स्ट्रिंग के विरुद्ध regexp का मिलान करें। |
| मॉड्यूल | यदि obj mod का उदाहरण है या मॉड के वंशजों में से किसी एक का उदाहरण है, तो सही लौटाता है। |
| Proc | obj के साथ ब्लॉक को प्रोक के पैरामीटर के रूप में आमंत्रित करता है जैसे Proc#call . यह एक प्रो ऑब्जेक्ट को when . का लक्ष्य बनने की अनुमति देना है केस स्टेटमेंट में क्लॉज। |
निष्कर्ष
इस पोस्ट में आपने सीखा कि कैसे == . को लागू करके अपनी कक्षाओं को और अधिक शक्तिशाली बनाया जाए तरीका। आपने == . के बीच का अंतर भी सीखा और === ।
इस पोस्ट को शेयर करना न भूलें ताकि और लोग इसे देख सकें 🙂