Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में एआरजीवी कैसे सेट हो जाता है?

आप जानते होंगे कि रूबी कमांड-लाइन तर्कों को एआरजीवी नामक वैश्विक सरणी में चिपका देती है। लेकिन इसे एआरजीवी क्यों कहा जाता है? यह एक दिलचस्प इतिहास पाठ है जो रूबी की उत्पत्ति को सी में उजागर करता है।

तर्क वेक्टर

ARGV का मतलब तर्क वेक्टर है। और इस अजीब पुराने समय के उपयोग में "वेक्टर" का अर्थ है "एक आयामी सरणी।"

C में, प्रत्येक प्रोग्राम में एक main() होता है समारोह। यह आमतौर पर कुछ इस तरह दिखता है:

int main(int argc, char *argv[]) {  
  ... your code here
}

जैसा कि आपने शायद देखा, मुख्य कार्य में दो तर्क हैं। ये क्रमशः, एक गिनती और कमांड-लाइन तर्कों की एक सरणी हैं।

जब आप बैश को अपना प्रोग्राम चलाने के लिए कहते हैं, तो यह एक सिस्टम कॉल करता है जिसके कारण OS आपके प्रोग्राम के main को कॉल करता है फ़ंक्शन और कुछ argc . में पास करने के लिए और argv मूल्य।

रूबी

रूबी दुभाषिया - एमआरआई कम से कम - सिर्फ एक सी प्रोग्राम है। ये रहा रूबी का main समारोह:

int
main(int argc, char **argv)
{
#ifdef RUBY_DEBUG_ENV
    ruby_set_debug_option(getenv("RUBY_DEBUG"));
#endif
#ifdef HAVE_LOCALE_H
    setlocale(LC_CTYPE, "");
#endif

    ruby_sysinit(&argc, &argv);
    {
    RUBY_INIT_STACK;
    ruby_init();
    return ruby_run_node(ruby_options(argc, argv));
    }
}

जैसा कि आप देख सकते हैं, यह argc . पास करता है और argv ruby_options . नामक फ़ंक्शन के लिए , जो बदले में ruby_process_options . को कॉल करता है , जो process_options . को कॉल करता है .

यह सभी रूबी दुभाषिया विकल्पों को संभालता है और अंततः ruby_set_argv . को कॉल करता है , जो ARGV . सेट करता है आप अपने रूबी कोड में देखते हैं।

void
ruby_set_argv(int argc, char **argv)
{
    int i;
    VALUE av = rb_argv;

#if defined(USE_DLN_A_OUT)
    if (origarg.argv)
    dln_argv0 = origarg.argv[0];
    else
    dln_argv0 = argv[0];
#endif
    rb_ary_clear(av);
    for (i = 0; i < argc; i++) {
    VALUE arg = external_str_new_cstr(argv[i]);

    OBJ_FREEZE(arg);
    rb_ary_push(av, arg);
    }
}

सुंदर स्वच्छ। मैं एमआरआई कोडबेस में गोता लगाने में अभी भी वास्तव में नया हूं, लेकिन इसमें कूदना और यह देखना मजेदार है कि चीजें कैसे काम करती हैं।


  1. रूबी 2.6 में एमजेआईटी क्या है और यह कैसे काम करता है?

    रूबी के प्रदर्शन में बहुत सुधार हो रहा है, संस्करण दर संस्करण… और रूबी विकास टीम रूबी को और भी तेज बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 परियोजना है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज होगा । इस प्रोजेक्ट का एक हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJ

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

    रूबी में स्ट्रक्चर क्या है? एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है। यहां एक उदाहरण दिया गया है : एक Point दो निर्देशांकों के साथ

  1. Redis SMEMBERS - सेट के सभी तत्वों को रेडिस में कैसे प्राप्त करें?

    इस ट्यूटोरियल में, हम सीखेंगे कि एक COMMAND - SMEMBERS का उपयोग करके, कुंजी पर संग्रहीत एक सेट मान के सभी तत्वों को कैसे प्राप्त किया जाए। रेडिस-क्ली में। रेडिस SMEMBERS कमांड का सिंटैक्स इस प्रकार है:- वाक्यविन्यास :- redis host:post> SMEMBERS <key name> आउटपुट :-  - array value, conta