2017-07-20 2 views
5

जहां तक ​​मैं देख सकता हूँ, एल्विस ऑपरेटर का उपयोग करने के लिए एक ही रास्ता इस तरह वाक्य रचना के साथ है उपयोग किया जाता है (कम से कम मेरे अनुभव में) जब कुछ उम्मीद के रूप में व्यवहार नहीं करता है।एल्विस ऑपरेटर में लॉगिंग शामिल करें?</p> <pre><code>foo = bar ?: return </code></pre> <p>मैं उत्सुक था अगर किसी को भी एक तरह से साथ आ गया है लॉगिंग शामिल करने के लिए, के रूप में आम तौर पर वापसी है:

हालांकि, निम्न सिंटैक्स अमान्य है:

foo = bar ?: { 
    Log.e(TAG, "Some error occurred.") 
    return 
} 
बेशक

मैं कर सकता बस कर निम्नलिखित,

foo = bar 
if (foo == null) { 
    Log.e(TAG, "Some error occurred.") 
    return 
} 

लेकिन वहाँ एल्विस ऑपरेटर के साथ प्रवेश करने सहित किसी भी तरह से है?

उत्तर

5

बस kotlin-stdlib से run { ... } समारोह है, जो लैम्ब्डा यह पारित हो जाता है चलाता है का उपयोग करें:

foo = bar ?: run { 
    Log.e(TAG, "Some error occurred.") 
    return 
} 
+1

हाँ, हम वही हैं। लेकिन मैं 'let' का उपयोग करता हूं। आपकी 'वापसी' इसे बाहर रखी जानी चाहिए, जो अधिक स्पष्ट रूप से होगी। –

+1

मुझे लगता है कि यह या डेविड फर्मन का जवाब स्वीकार किया जाना चाहिए। – marstran

2

{} एक लैम्ब्डा है, तो आप, यह आह्वान चाहिए उदाहरण के लिए:

//     v--- it is a lambda 
foo = bar ?: return { 
    Log.e(TAG, "Some error occurred.") 
}() // <--- invoke the lambda 

याlet के साथ एक लैम्ब्डा आह्वान:

foo = bar ?: return let{ 
    Log.e(TAG, "Some error occurred.") 
} 
+0

क्या आपका मतलब है 'run'? कोई मुफ्त 'चलो' समारोह नहीं है। इसे किसी ऑब्जेक्ट पर बुलाया जाना चाहिए। साथ ही, मुझे लगता है कि यह एक फ़ंक्शन बनाने के लिए बहुत मूर्ख नहीं है और फिर तुरंत इसे इस तरह से बुलाता है। 'रन' का उपयोग करना मूर्खतापूर्ण तरीका इमो है। – marstran

+0

@marstran मैं कभी नहीं कहता कि 'रन' एक बुरा तरीका है, मैंने कहा कि मैं 'लेटडा' का उपयोग करने के लिए 'लेट' का उपयोग करता हूं। –

+0

लेकिन जैसा कि आप यहां वर्णन करते हैं, 'चलो' काम नहीं करता है। यह एक "मुक्त" समारोह नहीं है। आपको इसे किसी ऑब्जेक्ट पर 'someObject.let {...} 'से आह्वान करना होगा। – marstran

1

ओह, तुम सब करने की ज़रूरत है :

foo = bar ?: kotlin.run { 
    Log.e(TAG, "Some error occurred.") 
    return 
} 

यह हो सकता है अगर शून्य की जांच हो तो मानक से कम पठनीय हो, लेकिन कम से कम यहां आप यह कैसे करते हैं।

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