Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में समानता को लागू करके दो वस्तुओं की तुलना कैसे करें

समानता का अर्थ है कि दो चीजें समान हैं। रूबी में, हम वस्तुओं और उनके मूल्यों की तुलना यह पता लगाने के लिए करते हैं कि क्या वे एक ही वस्तु हैं।

सवाल यह है...

आप रूबी में दो चीजों की तुलना कैसे करते हैं?

इसे पसंद करें :

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 . का लक्ष्य बनने की अनुमति देना है केस स्टेटमेंट में क्लॉज।

निष्कर्ष

इस पोस्ट में आपने सीखा कि कैसे == . को लागू करके अपनी कक्षाओं को और अधिक शक्तिशाली बनाया जाए तरीका। आपने == . के बीच का अंतर भी सीखा और ===

इस पोस्ट को शेयर करना न भूलें ताकि और लोग इसे देख सकें 🙂


  1. दो जावास्क्रिप्ट ऑब्जेक्ट्स को कैसे मर्ज करें?

    दो जावास्क्रिप्ट ऑब्जेक्ट्स को एक साथ मर्ज करने के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title&

  1. आईफोन/आईओएस में दो एनएसडीएटी की तुलना कैसे करें?

    इस लेख में हम देखेंगे कि स्विफ्ट में दो NSDates की तुलना कैसे करें। सबसे पहले हमें दो NSDates बनाने होंगे। हम इसे इस बार सिम्युलेटर के बजाय खेल के मैदान में करेंगे। आइए पहले दो अलग-अलग तिथियां बनाएं। let dateOne = NSDateComponents() dateOne.day = 5 dateOne.month = 6 dateOne.year = 1993 let dateTwo

  1. रूबी फ्रीज विधि - वस्तु परिवर्तनशीलता को समझना

    किसी वस्तु के परिवर्तनशील होने का क्या अर्थ है? फैंसी शब्दों को भ्रमित न होने दें, “परिवर्तनशीलता ” का सीधा सा मतलब है कि किसी वस्तु की आंतरिक स्थिति को बदला जा सकता है। जमे हुए . को छोड़कर, यह सभी वस्तुओं का डिफ़ॉल्ट है , या वे जो विशेष वस्तुओं की सूची का हिस्सा हैं। दूसरे शब्दों में, रूबी में सभ