अंतर क्या है? मुझे कब उपयोग करना चाहिए? उनमें से कई क्यों हैं?
अंतर क्या है? मुझे कब उपयोग करना चाहिए? उनमें से कई क्यों हैं?
जवाबों:
kind_of?
और is_a?
पर्यायवाची हैं।
instance_of?
अन्य दो से अलग है कि यह केवल तभी लौटता है true
जब ऑब्जेक्ट उस सटीक वर्ग का एक उदाहरण है, न कि एक उपवर्ग।
उदाहरण:
"hello".is_a? Object
और "hello".kind_of? Object
वापसी true
क्योंकि "hello"
एक है String
और String
एक उपवर्ग है Object
।"hello".instance_of? Object
रिटर्न false
।@honda.kind_of? Car
और @person.is_a? Administrator
, रूबी सौंदर्यशास्त्र के बारे में सब कुछ। वास्तव में, नोटिस व्याकरण त्रुटि ... सक्रिय समर्थन आप लिख सकते हैं साथ @person.is_an? Administrator
:) ... यही कारण है कि यह रूबी कोर में अब तक बना दिया है हो सकता है, वास्तव में।
kind_of?
लेकिन नहीं is_a?
?
is_an?
रूबी- 1.9.2- p0 में नहीं है। @ कलुआडु, नहीं। is_a?
का सिर्फ एक उपनाम हैkind_of?
। एक ही सी समारोह को लागू दोनों ही तरीकों से, rb_obj_is_kind_of
।
kind_of?
किए बिना ओवरराइड कर सकते हैं is_a?
।
is_an?
विधि ?! यह वर्तमान रेल संस्करण में नहीं है, और मैं इसके बारे में Google पर कुछ भी नहीं पा रहा हूँ या तो इसे पदावनत किया जा रहा है।
अंतर क्या है?
प्रलेखन से:
- - ( बुलियन )
instance_of?(class)
- दिए गए वर्ग का एक उदाहरण है,
true
तो लौटाताobj
है।
तथा:
- - ( बुलियन )
is_a?(class)
- ( बुलियन )kind_of?(class)
- रिटर्न
true
अगरclass
की श्रेणी हैobj
, या अगरclass
मेंobj
शामिल मॉड्यूल या सुपरक्लेसेस में से एक हैobj
।
यदि यह अस्पष्ट है, तो यह जानना अच्छा होगा कि वास्तव में क्या अस्पष्ट है, ताकि प्रलेखन में सुधार किया जा सके।
मुझे कब उपयोग करना चाहिए?
कभी नहीँ। इसके बजाय बहुरूपता का उपयोग करें।
उनमें से कई क्यों हैं?
मैं दो "कई" नहीं कहूंगा । उनमें से दो हैं, क्योंकि वे दो अलग-अलग काम करते हैं।
यह वस्तुओं का उपयोग करने के लिए अधिक रूबी की तरह है, चाहे वे किसी ऐसी विधि का जवाब दें जिसका आपको उपयोग करने की आवश्यकता है या नहीं respond_to?
। यह न्यूनतम इंटरफ़ेस और कार्यान्वयन दोनों अनजान प्रोग्रामिंग की अनुमति देता है।
यह हमेशा पाठ्यक्रम के लिए लागू नहीं होता है, इस प्रकार "टाइप" के बारे में अधिक रूढ़िवादी समझ के बारे में पूछने की संभावना अभी भी है, जो कि आपके द्वारा पूछे जाने वाले तरीकों का उपयोग करके वर्ग या आधार वर्ग है।
मैं भी दो कई फोन नहीं करूँगा ( is_a?
और kind_of?
एक ही विधि के उपनाम), लेकिन अगर आप अधिक संभावनाएँ देखना चाहते हैं, तो अपना ध्यान इस #class
तरीके पर लगाएँ:
A = Class.new
B = Class.new A
a, b = A.new, B.new
b.class < A # true - means that b.class is a subclass of A
a.class < B # false - means that a.class is not a subclass of A
# Another possibility: Use #ancestors
b.class.ancestors.include? A # true - means that b.class has A among its ancestors
a.class.ancestors.include? B # false - means that B is not an ancestor of a.class
is_a?
औरkind_of?
मौजूद: मुझे लगता है कि यह रूबी के डिजाइन दर्शन का हिस्सा है। पायथन कहेगा कि कुछ करने का केवल एक तरीका होना चाहिए; रूबी में अक्सर पर्यायवाची विधियाँ होती हैं, ताकि आप उस का उपयोग कर सकें जो बेहतर लगता है। यह वरीयता की बात है। यह आंशिक रूप से जापानी प्रभाव के कारण हो सकता है: मुझे बताया गया है कि वे ध्वनि को अच्छा बनाने के लिए वाक्य के आधार पर एक ही संख्या के लिए एक अलग शब्द का उपयोग करेंगे। हो सकता है कि मैट्स ने उस विचार को अपनी भाषा के डिजाइन में शामिल किया हो।