2010-11-28 24 views
86

कक्षा और क्लास के बीच क्या अंतर है?रूबी में कक्षा और क्लास के बीच क्या अंतर है?

+1

आपने बाद वाले को कहाँ देखा? –

+0

मैंने क्लास को एक से अधिक स्थानों में देखा है। हाल ही में जब सिंगलटन – s84

+14

'क्लास' का शोध आमतौर पर एक वेरिएबल नाम देने के लिए किया जाता है जिसमें 'क्लास' ऑब्जेक्ट होता है (याद रखें कक्षाएं ऑब्जेक्ट भी होती हैं), जैसे कि 'क्लास = स्ट्रिंग' में। क्या आप इसे गहन स्पष्टीकरण के लिए कहां देख चुके हैं, इसका स्रोत प्रदान कर सकते हैं? – Chubas

उत्तर

150

class एक कीवर्ड एक नए वर्ग को परिभाषित करने के लिए प्रयोग किया जाता है। चूंकि यह एक आरक्षित कीवर्ड है, इसलिए आप इसे एक चर नाम के रूप में उपयोग करने में सक्षम नहीं हैं। आप चर नाम के रूप में रूबी के कीवर्ड के किसी भी उपयोग नहीं कर सकते, तो आप def या module या if या end, आदि नामित चरों के लिए सक्षम नहीं होगा - class अलग नहीं है। ,

def show_methods(class) 
    puts Object.const_get(class).methods.inspect 
end 
show_methods "Kernel" 

यह एक त्रुटि में परिणाम को चलाने के लिए कोशिश कर रहा है जब से तुम एक चर नाम के रूप में class का उपयोग नहीं कर सकते हैं:

उदाहरण के लिए, निम्नलिखित पर विचार करें।

test.rb:1: syntax error, unexpected kCLASS, expecting ')' 
    def show_methods(class) 
         ^
test.rb:2: syntax error, unexpected ')' 
     puts Object.const_get(class).methods.inspect 

इसे ठीक करने के लिए, हम इसके बजाय पहचानकर्ता klass का उपयोग करेंगे। यह विशेष नहीं है, लेकिन जब आप कक्षा या कक्षा के नाम से काम कर रहे हों तो इसे पारंपरिक रूप से एक परिवर्तनीय नाम के रूप में उपयोग किया जाता है। यह ध्वन्यात्मक रूप से वही है, लेकिन चूंकि यह आरक्षित कीवर्ड नहीं है, इसलिए रूबी के पास कोई समस्या नहीं है।

def show_methods(klass) 
    puts Object.const_get(klass).methods.inspect 
end 

show_methods "Kernel" 

आउटपुट, अपेक्षा के अनुरूप,

["method", "inspect", "name", "public_class_method", "chop!"... 

आप किसी भी (गैर-आरक्षित) चर नाम इस्तेमाल कर सकते हैं है, लेकिन समुदाय klass उपयोग करने के लिए ले लिया है। इसमें कोई विशेष जादू नहीं है - इसका मतलब है "मैं यहां 'वर्ग' नाम का उपयोग करना चाहता था, लेकिन मैं नहीं कर सकता, क्योंकि यह एक आरक्षित कीवर्ड है"।

एक तरफ ध्यान दें पर, जब से तुम इसे बाहर गलत कई बार आपके द्वारा लिखे गए है, यह देखते हुए कि रूबी में, मामले मामलों के लायक है। पूंजी पत्र से शुरू होने वाले टोकन स्थिरांक हैं। Pickaxe के माध्यम से:

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

इस प्रकार, सही वर्तनी class और klass, बजाय Class और Klass है। उत्तरार्द्ध स्थिरांक होगा, और Class और Klass मान्य निरंतर नाम हैं, लेकिन मैं स्पष्टता उद्देश्यों के लिए उनका उपयोग करने के खिलाफ अनुशंसा करता हूं।

+7

ठीक है, विशेष रूप से 'स्थिर' नाम केवल वैध स्थिर नाम नहीं है, यह भी एक मौजूदा है! (यह कक्षा वर्ग है) – Ashe

+1

वाह, सुंदर। पूरी तरह से समझ में आता है। धन्यवाद क्रिस! :) – s84

+1

मुझे लगता है कि स्थानीय चर के रूप में 'क्लास' का उपयोग पिकैक्स से आता है - उन्होंने उस नाम का उपयोग कुछ उदाहरणों में किया है, क्योंकि आपने यहां वर्णित कारणों के लिए। –

5

एक वर्ग का नाम है और दूसरा डिफ़ॉल्ट रूप से केवल एक अनिर्धारित स्थिर है। और जोड़ी के लिए आपको देखने की अधिक संभावना है, class और klass, पूर्व कक्षाओं को परिभाषित करने के लिए एक कीवर्ड है जबकि उत्तरार्द्ध सिर्फ पहचानकर्ता है (वर्णों की किसी अन्य स्ट्रिंग की तरह)। इसका उपयोग तब किया जाता है जब आप "कक्षा" शब्द लिखना चाहते हैं लेकिन ऐसा नहीं कर सकता क्योंकि यह एक आरक्षित कीवर्ड है।

+0

बिंदु क्या है, मेरा मतलब है कि इसका उपयोग क्यों/कैसे किया जाता है, इसका आमतौर पर उपयोग किया जाता है? – s84

+3

@ सैम क्लास कक्षाओं को परिभाषित करने के लिए एक आरक्षित कीवर्ड है। इसलिए यदि आप किसी सामान्य वर्ग (जैसे मेटाप्रोग्रामिंग) के साथ कुछ सौदा करना चाहते हैं, तो आप 'class = Kernel.const_get (class_name)' नहीं लिख सकते हैं। लेकिन आप 'klass = kernel.const_get (class_name)' लिख सकते हैं, और इसका उपयोग "कक्षा" का प्रतिनिधित्व करने के लिए किया जाता है। –

+2

बिंदु यह है कि आप 'वर्ग' के लिए कीवर्ड 'वर्ग' का उपयोग नहीं कर सकते हैं ... क्योंकि यह एक आरक्षित शब्द (परिपत्र तर्क, मुझे पता है) तो शब्द 'क्लास' को प्रतिस्थापित किया जाता है। यह कई अन्य भाषाओं में एक आम मुहावरे है, उदा। जावा और सी #। – Scott

9

klass और clazz और clasz और जैसे रचनात्मक एक आरक्षित शब्द class चारों ओर पाने के लिए इस्तेमाल किया ग़लत वर्तनी कर रहे हैं।

यह class1 या cl या classX या जानबूझकर गलत वर्तनी के बजाय कुछ उपयोग करने के लिए आंखों पर बहुत कम जारिंग होगा।

9

मुझे लगता है कि klass भी एक रेल (या बल्कि ActiveRecord) method है। इसका उपयोग एसोसिएशन की कक्षा प्राप्त करने के लिए किया जाता है।

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