2013-05-30 4 views
6

मैं डेल्फी भाषा में कुछ आया जो मैंने पहले नहीं देखा था। एक सरल रिकॉर्ड और कहा कि रिकॉर्ड करने के लिए एक सूचक पर विचार करें:एक्सेस डेल्फी रिकॉर्ड फ़ील्ड के माध्यम से। या^

TRecord = record 
    value : double; 
end; 
PTRecord = ^TRecord; 

अब प्रकार PTRecord के एक चर घोषित:

var x : PTRecord; 

और कुछ जगह बनाने:

x := new (PTRecord); 

मैंने देखा है कि मैं यह कर सकते हैं '।' दोनों का उपयोग करके मूल्य फ़ील्ड तक पहुंचें नोटेशन और '^।' अंकन। इस प्रकार निम्नांकित दो पंक्तियों प्रचालन बराबर दिखाई देते हैं, संकलक शिकायत नहीं है और क्रम ठीक काम करता है:

x.value := 4.5; 
x^.value := 2.3; 

मैं सोचा होगा कि '^।' मूल्य तक पहुंचने का सही और एकमात्र तरीका है? मेरा सवाल है, क्या सरल डॉट नोटेशन का उपयोग करना ठीक है या अगर मैं पॉइंटर इंडिकेशन '^।' का उपयोग नहीं करता तो मैं परेशानी में भाग जाऊंगा? शायद यह अच्छी तरह से ज्ञात व्यवहार है लेकिन यह पहली बार है जब मैं इसे पार कर गया हूं।

उत्तर

9

यह पूरी तरह से ध्वनि और देखभाल को छोड़ने के लिए सुरक्षित है। बेशक, तर्क देखभाल की मांग करता है, लेकिन अभिव्यक्ति x.value में अपने आप में सार्थक घुसपैठ नहीं है, इसलिए संकलक आपको वास्तव में x^.value का अनुमान लगाएगा। यह सुविधा तथाकथित 'विस्तारित वाक्यविन्यास' का एक हिस्सा है। आप इस at the documentation के बारे में पढ़ सकते हैं।

+0

दिलचस्प, मैं विस्तारित वाक्यविन्यास से अनजान था। लिंक के लिए धन्यवाद। – rhody

+0

यह ऑब्जेक्ट्स के लिए पेश किया गया था, फिर रिकॉर्ड्स में विस्तारित किया गया था साथ ही –

4

जब Extended syntax प्रभाव में है (डिफ़ॉल्ट), तो आप पॉइंटर्स का संदर्भ देते समय देखभाल को छोड़ सकते हैं।

4

डेल्फी ने दो दशकों के लिए उस वाक्यविन्यास का समर्थन किया है। जब आप . ऑपरेटर का उपयोग करते हैं, तो संकलक ^ ऑपरेटर को निहित रूप से लागू करेगा। दोनों शैलियों सही हैं। आपके प्रोग्राम को गलत काम करने का कोई मौका नहीं है क्योंकि ऐसा कोई मामला नहीं है जहां ^ की उपस्थिति या अनुपस्थिति अगले . ऑपरेटर की व्याख्या को प्रभावित करेगी।

हालांकि यह व्यवहार "विस्तारित वाक्यविन्यास" विकल्प द्वारा नियंत्रित होता है, लेकिन कोई भी उस विकल्प को अक्षम करता है। आप सभी संदर्भों में सेट होने पर सुरक्षित रूप से भरोसा कर सकते हैं। यह अंतर्निहित Result चर की उपलब्धता को भी नियंत्रित करता है, और जिस तरह से चरित्र पॉइंटर्स सरणी वाक्यविन्यास के साथ संगत होते हैं।

1

यह निहित सूचक संरचित प्रकार के लिए अपसंदर्भन कहा जाता है और डेल्फी 1. इस भाषा विस्तार वर्गों के सदस्यों तक पहुँचने बनाने के लिए करना है से प्राप्त होती है (कक्षा structured types और भी उदाहरण हैं निहित संकेत दिए गए हैं कर रहे हैं) सदस्यता ऑपरेटर के माध्यम से (.) केवल, स्पष्ट dereference ऑपरेटर (^) के लिए आवश्यकता से परहेज।

आप सभी डेल्फी कंपाइलरों में इस एक्सटेंशन की उपस्थिति पर सुरक्षित रूप से भरोसा कर सकते हैं। अधिक लचीलापन के लिए आप $IFOPT X+ सशर्त निर्देश का उपयोग करके इस एक्सटेंशन की उपस्थिति के लिए परीक्षण कर सकते हैं।

+0

यह स्पष्टीकरण आकर्षक लगता है, लेकिन। ऑपरेटर अभी भी एक्स-मोड में कक्षाओं के लिए काम करता है –

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