टर्नरी ऑपरेटर और प्रिंट


10

नीचे दिए गए आदेश में क्या गलत है

awk 'BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}'

आउटपुट:

awk: BEGIN {a = 5;b=6; (a==b)? print "a==b" : print "a!=b"}
awk:                           ^ syntax error

जवाबों:


25

कई अन्य प्रोग्रामिंग भाषाओं की तरह, awkअभिव्यक्ति और कथनों के बीच अंतर करता है। द्वारा और बड़े, कथनों में किए जाने वाले कार्य हैं, जबकि अभिव्यक्तियाँ अभिकलन हैं जिनका परिणाम एक मूल्य होता है।

टर्नरी ऑपरेटर awk, सी में अपने समकक्ष की तरह जहां से आता है, वह खुद एक अभिव्यक्ति है (एक बयान नहीं) जो तीन अन्य अभिव्यक्तियों की अपेक्षा करता है expr1 ? expr2 : expr3printएक बयान है। इसका उपयोग नहीं किया जा सकता है, जहां एक अभिव्यक्ति के लिए कहा जाता है, इसलिए वाक्यविन्यास त्रुटि।

क्या आपने कोशिश की है awk 'BEGIN {a = 5;b=6; print (a==b)? "a==b" : "a!=b"}'?

एक बयान का उपयोग करना जहां एक अभिव्यक्ति के लिए कहा जाता है कोई मतलब नहीं हो सकता है। मान वापस नहीं करते हैं। तो जब आपके पास है condition ? stmt1 : stmt2, तो टर्नेरी ऑपरेटर द्वारा गणना की गई कीमत क्या है? यदि conditionयह गलत है, तो इसका मूल्य होना चाहिए, stmt2लेकिन यह मूल्य नहीं है, यह एक कार्रवाई है।


वहाँ अन्य भाषाओं जहां बयान कर रहे हैं कर वापसी मान (गहरे लाल रंग का मन में आता है), लेकिन इस सवाल के लिए एक आदर्श जवाब है।
ग्लेन जैकमैन

उस स्पष्टीकरण के लिए धन्यवाद, @glennjackman। मैं रूबी पता नहीं है तो हो सकता है मैं नहीं जानता कि मैं क्या बात कर रहा हूँ, लेकिन मेरी अपनी टिप्पणी पढ़ने पर पहली बार सोचा कि अनुमान है कि इसका मतलब है कि रूबी में था बयानों तरह का कर रहे हैं भाव
Celada

हां, आप इस तरह के बेकार उदाहरण की तरह काम कर सकते हैं:x = if true; print "yes"; else; print "no"; end
ग्लेन जैकमैन

मुझे लगता है कि यह निर्माण की संभावना को नकारता है (cond1) ? printf("str1") : printf("str2")? धन्यवाद त्रिगुट की सूक्ष्मता को समझाने के लिए। संपादित करें: वास्तव में, निम्नलिखित बदसूरत निर्माण का उपयोग करते हुए: str = (cond1) ? sprintf("str1") : sprintf("str2"); printf("%s", str)काम करता है, लेकिन इस बिंदु पर इसका लगभग उतना ही कॉम्पैक्ट और बहुत अधिक उपयोग करने के लिए स्पष्ट है अगर / और :)
isosceleswheel

यदि आप बेजोड़ स्थितियों के लिए शून्य रेखाएँ नहीं छापना चाहते हैं, तो
प्रिंटफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.