2010-06-09 8 views
13

नीचे दिए गए में बाहर के उपयोग ada में कुछ कोडएडीए

with TYPE_VECT_B; use TYPE_VECT_B; 

    Package TEST01 is 
    procedure TEST01 
      (In_State : IN  VECT_B ; 
      Out_State : IN OUT VECT_B); 

    function TEST02 
      (In_State : IN  VECT_B) return Boolean ; 

    end TEST01; 

TYPE_VECT_B पैकेज विनिर्देश और शरीर भी नीचे

Package TYPE_VECT_B is 

    type VECT_B is array (INTEGER range <>) OF BOOLEAN ; 

    rounded_data : float ; 
    count : integer ; 
    trace : integer ; 
    end TYPE_VECT_B; 

    Package BODY TYPE_VECT_B is 
    begin 
    null; 
end TYPE_VECT_B; 

क्या चर In_State और Out_State करता है परिभाषित किया गया है वास्तव में मतलब है ? मुझे लगता है कि इन_स्टेट का अर्थ इनपुट चर है। मैं वास्तव में उलझन में आता हूं क्या वास्तव में आउट_स्टेट का मतलब है?

उत्तर

14

एक in पैरामीटर पढ़ा जा सकता है लेकिन उपप्रोग्राम द्वारा लिखा नहीं गया है। in डिफ़ॉल्ट है। एडीए 2012 से पहले, कार्यों को केवल in पैरामीटर रखने की अनुमति थी। वास्तविक पैरामीटर एक अभिव्यक्ति है।

एक out पैरामीटर का तात्पर्य है कि पिछले मान में कोई रूचि नहीं है। उपप्रोग्राम से पैरामीटर को लिखने की उम्मीद है। पैरामीटर को लिखने के बाद, उपप्रोग्राम जो लिखा है उसे वापस पढ़ सकता है। बाहर निकलने पर वास्तविक पैरामीटर को लिखा गया मान प्राप्त होता है (इस क्षेत्र में जटिलताएं हैं!)। वास्तविक पैरामीटर एक चर होना चाहिए।

एक in out पैरामीटर out पैरामीटर की तरह है, सिवाय इसके कि पिछले मान ब्याज की है और असाइनमेंट से पहले उपप्रोग्राम द्वारा पढ़ा जा सकता है। उदाहरण के लिए,

procedure Add (V : Integer; To : in out Integer; Limited_To : Integer) 
is 
begin 
    -- Check that the result wont be too large. This involves reading 
    -- the initial value of the 'in out' parameter To, which would be 
    -- wrong if To was a mere 'out' parameter (it would be 
    -- uninitialized). 
    if To + V > Limited_To then 
     To := Limited_To; 
    else 
     To := To + V; 
    end if; 
end Add; 
+2

एक एफवाईआई के रूप में जस्ट: एडा, एडा 2012 का अगला संशोधन अब कार्य तर्कों को प्रतिबंधित और प्रतिबंधित करने के लिए प्रतिबंधित नहीं करेगा, यानी कार्यों को बाहर करने और पैरामीटर में भी अनुमति दी जाएगी। http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai05s/ai05-0143-1.txt?rev=1.3 –

8

असल में, किसी फ़ंक्शन या प्रक्रिया के प्रत्येक पैरामीटर में इसकी दिशा होती है। विकल्प in, out, in out (दोनों), या access हैं। यदि आप उनमें से किसी एक को नहीं देखते हैं, तो यह in पर डिफ़ॉल्ट हो जाता है।

in का मतलब है कि डेटा कॉलर (पैरामीटर के माध्यम से) से सबराउटिन में जा सकता है। आपको दिनचर्या के अंदर in पैरामीटर से पढ़ने की अनुमति है। out का अर्थ है कि डेटा उस दिन से नियमित रूप से बाहर आ सकता है, और इस प्रकार आपको नियमित रूप से पैरामीटर के मानों को असाइन करने की अनुमति है। आम तौर पर, कंपाइलर डेटा पास करने को कैसे पूरा करता है संकलक तक है, जो आपको निर्दिष्ट करने की अनुमति देने के लिए एडा के सामान्य दर्शन के अनुसार है, आप यह नहीं चाहते कि आप इसे कैसे करना चाहते हैं

access एक विशेष मामला है, और लगभग बिश भाषा में आपकी पैरामीटर परिभाषा में "*" डालने जैसा है।

अगले प्रश्न वाले लोगों का आमतौर पर "अगर मैं in पैरामीटर के रूप में कुछ बड़ा पास करता हूं, तो क्या यह उस डेटा को स्टैक या कुछ पर धक्का दे रहा है?" जवाब "नहीं" है, जब तक कि आपके कंपाइलर लेखकों को बेवकूफ बेवकूफ न हो। प्रत्येक एडीए कंपाइलर जो मुझे हुड के नीचे जानता है, संदर्भ द्वारा मशीन रजिस्टर में फिट होने से बड़ी वस्तुओं को पास करता है। यह कंपाइलर है, न कि आपके पैरामीटर गुजरने वाले तंत्र का विवरण, जो नियमित रूप से डेटा को वापस नहीं लिखता है। दोबारा, आप एडा को बताते हैं कि आप क्या करना चाहते हैं, यह करने के लिए यह सबसे प्रभावी तरीका है।

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