2010-09-18 10 views
17

एरलांग वाक्यविन्यास में प्रश्न चिह्न का क्या अर्थ है?एरलांग: प्रश्न चिह्न वाक्यविन्यास का क्या अर्थ है?

उदाहरण के लिए:

Json = ?record_to_json(artist, Artist). 

स्रोत के पूरे संदर्भ here पाया जा सकता है।

+0

प्रयुक्त Google लेकिन कुछ भी नहीं आया (इसके लिए: "erlang प्रश्न चिह्न वाक्यविन्यास")। हो सकता है कि मुझे अधिक प्रासंगिक परिणाम प्राप्त करने के लिए वेब इतिहास या कुछ सक्रिय करना चाहिए (यहां तक ​​कि वही कीवर्ड परिणाम का उपयोग करना सभी के लिए विशेष रूप से अधिक idiosyncratic कीवर्ड पर समान नहीं है)। लेकिन टिप्पणी के लिए धन्यवाद ... फिर भी मैं एर्लांग अनुभव के साथ किसी और की सराहना करता हूं कि कैसे और क्यों उपयोग किया जाता है ... –

+13

@ डेलनिंग - गुगलिंग इस प्रश्न को लाता है – OrangeDog

उत्तर

23

एरलांग macros की पहचान के लिए प्रश्न चिह्न का उपयोग करता है। उदाहरण के लिए नीचे दिए गए कोड पर विचार करें:

-ifdef(debug). 
-define(DEBUG(Format, Args), io:format(Format, Args)). 
-else. 
-define(DEBUG(Format, Args), void). 
-endif. 

प्रलेखन कहते हैं,

मैक्रो संकलन के दौरान विस्तार कर रहे हैं। एक साधारण मैक्रो ?ConstReplacement के साथ प्रतिस्थापित किया जाएगा।

यह टुकड़ा एक मैक्रो DEBUG कहा जाता है कि एक स्ट्रिंग मुद्रित करने के लिए debug संकलन समय पर सेट है, तो एक फोन साथ बदल दिया है परिभाषित करता है। मैक्रो उसके बाद निम्न कोड इस प्रकार में प्रयोग किया जाता है:

?DEBUG("Creating ~p for N = ~p~n", [First, N]), 

यह बयान विस्तार किया है और अगर debug सेट किया गया है उचित सामग्री के साथ बदल दिया है। इसलिए आपको केवल debug सेट होने पर डीबग संदेशों को देखना होगा।

अद्यतन

@rvirding के लिए धन्यवाद:

प्रश्न चिह्न कोशिश करते हैं और विस्तार क्या किसी मैक्रो कॉल के रूप में इस प्रकार का मतलब है। सामान्य परमाणु या चर के रूप में मैक्रो नाम (परमाणु या चर) का उपयोग करने पर कुछ भी प्रतिबंधित नहीं है। तो [उपरोक्त] उदाहरण में आप DEBUG का उपयोग सामान्य चर के रूप में कर सकते हैं जब तक कि आप ? के साथ इसे उपसर्ग नहीं करते। भ्रमित, सबसे निश्चित रूप से, लेकिन अवैध नहीं।

+3

पिक्य होने के लिए: एक प्रश्न चिह्न का प्रयास करने और विस्तार करने का मतलब है एक मैक्रो कॉल के रूप में क्या चलता है। सामान्य परमाणु या चर के रूप में मैक्रो नाम (परमाणु या चर) का उपयोग करने पर कुछ भी प्रतिबंधित नहीं है। तो आपके उदाहरण में आप 'DEBUG' को सामान्य चर के रूप में तब तक उपयोग कर सकते हैं जब तक आप इसे '?' से उपसर्ग नहीं करते। भ्रमित, सबसे निश्चित रूप से, लेकिन अवैध नहीं। – rvirding

+0

@rvirding: धन्यवाद! लापरवाही से उधार लिया है और मेरे जवाब में जोड़ा है। –

5

this documentation पर आधारित, मेरा मानना ​​है कि यह एक मैक्रो का जिक्र करने के लिए वाक्यविन्यास है।

और Learn You Some Erlang से:

Erlang मैक्रो वास्तव में सी '#define के बयानों, मुख्य रूप से इस्तेमाल किया कम कार्य करता है और स्थिरांक को परिभाषित करने के लिए समान हैं। वे वीएम के लिए संकलित किए जाने से पहले टेक्स्ट द्वारा प्रतिनिधित्व किए गए पाठ द्वारा प्रतिनिधित्व सरल अभिव्यक्तियां हैं। ऐसे मैक्रोज़ मुख्य रूप से हैं जो आपके मॉड्यूल के चारों ओर तैरते हुए जादू मान से बचने के लिए उपयोगी हैं। एक मैक्रो को के मॉड्यूल विशेषता के रूप में परिभाषित किया गया है: -define (मैक्रो, some_value)। और मॉड्यूल में परिभाषित किसी भी फ़ंक्शन के अंदर मैक्रो के रूप में उपयोग किया जाता है। 'फ़ंक्शन' मैक्रो -define (उप (एक्स, वाई), एक्स-वाई) के रूप में लिखा जा सकता है। और इस्तेमाल किया गया? उप (23,47), बाद में संकलक द्वारा 23-47 द्वारा प्रतिस्थापित किया गया। कुछ लोग अधिक जटिल मैक्रोज़ का उपयोग करेंगे, लेकिन मूल वाक्यविन्यास वही रहता है।

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