अंतर क्या है? मुझे कब उपयोग करना चाहिए? उनमें से कई क्यों हैं?
अंतर क्या है? मुझे कब उपयोग करना चाहिए? उनमें से कई क्यों हैं?
जवाबों:
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?मौजूद: मुझे लगता है कि यह रूबी के डिजाइन दर्शन का हिस्सा है। पायथन कहेगा कि कुछ करने का केवल एक तरीका होना चाहिए; रूबी में अक्सर पर्यायवाची विधियाँ होती हैं, ताकि आप उस का उपयोग कर सकें जो बेहतर लगता है। यह वरीयता की बात है। यह आंशिक रूप से जापानी प्रभाव के कारण हो सकता है: मुझे बताया गया है कि वे ध्वनि को अच्छा बनाने के लिए वाक्य के आधार पर एक ही संख्या के लिए एक अलग शब्द का उपयोग करेंगे। हो सकता है कि मैट्स ने उस विचार को अपनी भाषा के डिजाइन में शामिल किया हो।