2009-05-06 24 views
40

रूबी में कक्षा और प्रकार के तरीकों के बीच क्या अंतर है? मैंने देखा है कि प्रकार कुछ वर्गों के प्रकार को खोजने के लिए काम करता है लेकिन दूसरों को नहीं।कक्षा() बनाम प्रकार() रूबी

उत्तर

48

मुख्य अंतर यह है कि Object#type बहिष्कृत है। ऑब्जेक्ट के लिए आरडीओसी # प्रकार:

ऑब्जेक्ट # कक्षा के लिए समानार्थी शब्दकोष।

यहाँ आप Object#class क्यों उपयोग करना चाहिए:

, obj के वर्ग, अब वस्तु # प्रकार से अधिक पसंद रिटर्न के रूप में रूबी में एक वस्तु के प्रकार केवल शिथिल उस वस्तु से बंधा है वर्ग यह विधि को हमेशा स्पष्ट रिसीवर के साथ बुलाया जाना चाहिए, क्योंकि कक्षा रूबी में आरक्षित शब्द भी है।

असल में, आप शायद अधिकांश मामलों में किसी ऑब्जेक्ट की कक्षा की जांच करने के बजाय Object#respond_to? का उपयोग करना चाहते हैं।

+0

यदि यह समानार्थी है, तो मुझे एक अपरिभाषित विधि त्रुटि क्यों मिलेगी जब मैं उस वर्ग पर टाइप करता हूं जिसे मैंने स्वयं परिभाषित किया है? लेकिन वही बात तब नहीं होती जब मैं एक ही कक्षा के लिए कक्षा विधि को बुलाता हूं। अपरिभाषित विधि त्रुटि ऐसा नहीं लगता है कि आपको बहिष्कृत विधि के लिए क्या मिलेगा। –

+0

@ क्रिस कोलिन्स मेरा अनुमान है कि डॉक्टर बंद है, और यह एक सख्त समानार्थी नहीं है। प्वाइंट बनी हुई है कि ऑब्जेक्ट # प्रकार एक गैर-उपयोग विधि है। – runako

+4

answer_to का उपयोग क्यों करें? –

15

#type#class के लिए समानार्थी है, लेकिन यह रूबी 1.8 में बहिष्कृत है, और स्पष्ट रूप से रूबी 1.9 से चला गया है। बस हर जगह #class का उपयोग करें।

 

# For ruby 1.8 

$ ri Object#type 
------------------------------------------------------------ Object#type 
    obj.type => class 
------------------------------------------------------------------------ 
    Deprecated synonym for Object#class. 


# For ruby 1.9 

$ ri1.9 Object#type 
Nothing known about Object#type 
+0

यदि यह समानार्थी है, तो मुझे एक कक्षा में टाइप करने पर एक अपरिभाषित विधि त्रुटि क्यों मिलेगी जिसे मैंने स्वयं परिभाषित किया है? लेकिन वही बात तब नहीं होती जब मैं एक ही कक्षा के लिए कक्षा विधि को बुलाता हूं। अपरिभाषित विधि त्रुटि ऐसा नहीं लगता है कि आपको बहिष्कृत विधि के लिए क्या मिलेगा। –

+0

क्या आप रूबी 1.9 पर हैं? रूबी 1.8 पर मुझे कोई त्रुटि नहीं मिलती है, केवल बहिष्करण के बारे में एक चेतावनी। – kch

+0

और यदि आप रूबी 1.9 पर हैं, तो, बहिष्कार का मतलब है कि इसे कुछ हटा दिया जाएगा, और ऐसा लगता है कि 1.9 ऐसा है। – kch

संबंधित मुद्दे