Lua में इनलाइन स्थितियां (a == b? "हाँ": "नहीं")?


95

लुआ में इनलाइन स्थितियों का उपयोग करने के लिए वैसे भी क्या है?

जैसे कि:

print("blah: " .. (a == true ? "blah" : "nahblah"))

1
समस्या के स्पष्टीकरण और कई समाधानों के साथ-साथ टर्नरी ऑपरेटर के बारे में लुका-उपयोगकर्ता विकि पर एक अच्छा लेख है ।
मारकिन

जवाबों:


126

ज़रूर:

print("blah: " .. (a and "blah" or "nahblah"))

32
जवाब के लिए +1। हालांकि मुझे नहीं लगता कि यह कड़ाई से सच है - मैं LUA का उपयोग नहीं करता - लेकिन मुझे लगता है कि यह अन्य भाषाओं में एक टर्नरी ऑपरेटर के इस दृष्टिकोण के साथ "दोष" साझा करता है। कल्पना कीजिए: (cond and false-value or x)जिसके परिणामस्वरूप xसभी मामले होंगे।

1
वह भी A के मान को नहीं छापेगा?
corsiKa

11
@glowcoder No. "संयुग्मन संचालक (और) अपना पहला तर्क लौटाता है यदि यह मान गलत या शून्य है; अन्यथा, और अपना दूसरा तर्क लौटाता है। यदि यह मान शून्य और असत्य से अलग है, तो असंगति संचालक (या) अपना पहला तर्क लौटाता है। , अन्यथा, या अपना दूसरा तर्क लौटाता है। दोनों और, या शॉर्ट-कट मूल्यांकन का उपयोग करते हैं, अर्थात्

3
@ पीएसटी सही है कि अगर इरादे वही है जो a and false or trueउतने ही उत्तर देने वाला नहीं है not a। इस मुहावरे का उपयोग आमतौर पर उन मामलों के लिए किया जाता है, जहाँ अगर वांछित मूल्य aसही है falseया नहीं हो सकता है nil
RBerteig

1
यदि आप चर के साथ इस फॉर्म का उपयोग कर रहे हैं, तो आप शायद मान लें कि दूसरा चर गैर-गलत है, जिसका अर्थ है कि आपको लिखना चाहिए a and assert(b) or c
होवरहेल

31

यदि आप के लिए a and t or fकाम नहीं करता है, तो आप हमेशा एक समारोह बना सकते हैं:

function ternary ( cond , T , F )
    if cond then return T else return F end
end

print("blah: " .. ternary(a == true ,"blah" ,"nahblah"))

बेशक, फिर आपके पास ड्रा है कि हमेशा टी और एफ का मूल्यांकन किया जाता है .... चारों ओर पाने के लिए आपको अपने टर्नरी फ़ंक्शन को फ़ंक्शन प्रदान करने की आवश्यकता होती है, और जो कि अनपेक्षित हो सकती है:

function ternary ( cond , T , F , ...)
    if cond then return T(...) else return F(...) end
end

print("blah: " .. ternary(a == true ,function() return "blah" end ,function() return "nahblah" end))

मुझे लगता है कि यह बूलियन चर के लिए सबसे उपयोगी है
व्याचेस्लाव

1
यह उत्तर वास्तव में शीर्ष उत्तर से बेहतर है क्योंकि यह बूलियंस के लिए भी काम करता है।
१४:१:03 बजे

मुझे लगता है कि एक अधिक सामान्य किनारे का मामला है कि यह समाधान कब tहोता है nil
नेग्रांनाइट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.