यदि आप कुछ समय से रूबी का उपयोग कर रहे हैं तो आप इस बारे में उत्सुक हो सकते हैं कि हुड के नीचे कुछ चीजें कैसे काम करती हैं।
रूबी इंटर्नल्स में गहराई से जाने का एक तरीका वह सोर्स कोड पढ़ना है जो इसे काम करता है। भले ही आप C न जानते हों, फिर भी आप कुछ दिलचस्प चीजें सीख सकते हैं।
सोर्स कोड रूबी के लिए गिटहब रेपो पर पाया जा सकता है।
आदर्श रूप से, आप Codequery जैसे टूल का उपयोग करना चाहते हैं जो आपको आसानी से क्लास और मेथड नाम खोजने की अनुमति देता है।
कोर क्लासेस की खोज
आपकी अधिकांश खोज रूट फोल्डर में होगी। यहीं आपको Object के लिए object.c में या Array के लिए array.c में सभी कोर क्लासेस का सोर्स कोड मिलेगा।
आइए hash.c पर एक नज़र डालते हैं।
यदि आप लाइन 4468 तक सभी तरह से नीचे स्क्रॉल करते हैं तो आपको कुछ परिचित नाम दिखाई देंगे।
आइए इससे शुरू करते हैं:
rb_cHash = rb_define_class("Hash", rb_cObject);
इस लाइन में, Hash क्लास को rb_define_class फंक्शन द्वारा परिभाषित किया जा रहा है। दूसरा तर्क (rb_cObject) इस क्लास के लिए सुपरक्लास है।
यदि आप जानना चाहते हैं कि क्लास को परिभाषित करने की प्रक्रिया कैसे काम करती है तो आप rb_define_class खोज सकते हैं।

rb_define_class का पहला भाग जांचता है कि क्या क्लास पहले से ही परिभाषित की गई है।
if (rb_const_defined(rb_cObject, id)) {
// ...
}
उस if ब्लॉक के अंदर, रूबी कुछ सनिटी चेक करता है, जैसे यह सुनिश्चित करना कि हम पहले से परिभाषित क्लास के साथ काम कर रहे हैं।
यदि क्लास परिभाषित नहीं है तो यह इस तरह परिभाषित हो जाती है:
klass = rb_define_class_id(id, super); st_add_direct(rb_class_tbl, id, klass); rb_name_class(klass, id); rb_const_set(rb_cObject, id, klass); rb_class_inherited(super, klass); return klass;
आप इन सभी मेथड्स की परिभाषा पढ़ सकते हैं, लेकिन मुझे लगता है कि वे काफी आत्म-व्याख्यात्मक हैं।
st_add_direct में, 'st' भाग का अर्थ 'सिंबल टेबल' है, और यह सिर्फ एक हैश टेबल है। rb_const_set फंक्शन Object क्लास पर एक कॉन्स्टेंट सेट करता है, यह क्लास को हर जगह उपलब्ध कराएगा।
और rb_class_inherited सुपरक्लास के inherited मेथड को कॉल करता है, आप इस मेथड के लिए डॉक्यूमेंटेशन यहां पा सकते हैं।
कोड का अगला भाग मेथड परिभाषाओं से बना है। MRI इसके लिए rb_define_method का उपयोग करता है।
यहां एक उदाहरण है:
rb_define_method(rb_cHash,"index", rb_hash_index, 1); rb_define_method(rb_cHash,"size", rb_hash_size, 0); rb_define_method(rb_cHash,"length", rb_hash_size, 0); rb_define_method(rb_cHash,"empty?", rb_hash_empty_p, 0);
तर्क इस तरह जाते हैं:
- पहला तर्क वह क्लास है जिस पर यह मेथड परिभाषित किया जा रहा है
- दूसरा तर्क मेथड नाम है, तीसरा तर्क वह C फंक्शन है जो वास्तव में इस मेथड को लागू करता है
- अंतिम तर्क इस रूबी मेथड के लिए आवश्यक तर्कों की संख्या है (एक नकारात्मक मान वैकल्पिक तर्कों का अर्थ है)
rb_define_singleton_method फंक्शन का उपयोग क्लास मेथड को परिभाषित करने के लिए किया जाता है।
rb_define_singleton_method(rb_cHash, "[]", rb_hash_s_create, -1);
rb_define_singleton_method का शरीर कोड की सिर्फ एक लाइन है:
rb_define_method(singleton_class_of(obj), name, func, argc);
यदि आप खोज जारी रखना चाहते हैं, तो देखने के लिए एक अच्छी फाइल object.c है।
स्टैंडर्ड लाइब्रेरी की खोज
ठीक है, आज के लिए इतना C काफी है!
कुछ रूबी कोड पढ़ने के बारे में क्या ख्याल है?
रूबी स्टैंडर्ड लाइब्रेरी रूबी में लिखी गई है और आप इसे /lib डायरेक्टरी के तहत पा सकते हैं।
स्टैंडर्ड लाइब्रेरी में OpenStruct, Base64 एन्कोडिंग और Set डेटा संरचना जैसी चीजें शामिल हैं।
एक सेट एक सरणी के समान है, लेकिन इस विशेष गुण के साथ कि सभी एलिमेंट्स अद्वितीय हैं। दूसरे शब्दों में, एक सेट में कोई डुप्लिकेट नहीं होता।
यह कैसे काम करता है? क्या इसके पीछे कोई फैंसी एल्गोरिदम हैं?
यदि हम set.rb पर एक नज़र डालते हैं तो आप जल्दी से पता लगा लेंगे कि यह एक Hash ऑब्जेक्ट द्वारा समर्थित है।
# दिए गए ऑब्जेक्ट को सेट में जोड़ता है और self लौटाता है। कई एलिमेंट्स जोड़ने के लिए +merge+ का उपयोग करें। def add(o) @hash[o] = true self end alias << add
तो यदि आप एक डुप्लिकेट एलिमेंट जोड़ते हैं, तो यह जांचने की कोई आवश्यकता नहीं है कि यह पहले से मौजूद है, यह बस पुराने को ओवरराइट कर देगा।
रूबिनियस की खोज
रूबी के सोर्स कोड का पता लगाने का एक और तरीका रूबिनियस जैसे वैकल्पिक कार्यान्वयन को देखना है।
रूबिनियस कोड MRI की तुलना में अलग तरीके से व्यवस्थित है, इसलिए इसके लिए मुझे गिटहब और 'फाइंड फाइल' फीचर का उपयोग करना पसंद है।

यदि आप Enumerable के बारे में अधिक जानना चाहते हैं तो आप बस 'enumerable' टाइप करें और आपको सभी संबंधित फाइलें दिखाई देंगी।
निष्कर्ष
जैसा कि आपने देखा, आप बिना ज्यादा मेहनत के सीख सकते हैं कि रूबी हुड के नीचे चीजें कैसे करता है। आगे बढ़ें और अपने दम पर खोज करें और सभी को बताएं कि आपने क्या खोजा!
अगर आपको यह पोस्ट पसंद आई तो मेरे न्यूज़लेटर में शामिल होना न भूलें, बस नीचे दिए गए फॉर्म में अपना ईमेल डालें और आपको मुफ्त अपडेट और विशेष सामग्री प्राप्त होगी।