2017-07-27 12 views
5

नीचे दिए गए कोड में, यदि यात्रा खाली है तो मैं अपने खाली दृश्य दिखाना चाहता हूं और फिर वापस लौटाएं और नीचे दिए गए कोड को चलाने से बचें, लेकिन संकलक कहता है "यहां वापसी की अनुमति नहीं है"।लैम्ब्डा के अंदर वापसी का उपयोग करना?

mainRepo.fetchUpcomingTrips { trips -> 
    if (trips.isEmpty()) { 
     showEmptyViews() 
     return 
    } 

    // run some code if it's not empty 
} 

क्या ऐसा करने का कोई तरीका है?

मुझे पता है कि मैं इसे किसी अन्य ब्लॉक में डाल सकता हूं लेकिन अगर मुझे कुछ और लिखना नफरत है, तो कुछ और स्थितियों के दौरान मेरी राय में यह कम समझने योग्य/पठनीय है।

उत्तर

14

बस योग्य वापसी सिंटैक्स का उपयोग करें: [email protected]

Kotlin में, return एक लैम्ब्डा के अंदर अंतरतम नेस्टिंग fun (अनदेखी lambdas) से लौटने का मतलब है, और यह lambdas कि inlined नहीं हैं में अनुमति नहीं है।

[email protected] वाक्यविन्यास का उपयोग करने के दायरे को निर्दिष्ट करने के लिए उपयोग किया जाता है।

mainRepo.fetchUpcomingTrips { trips -> 
    if (trips.isEmpty()) { 
     showEmptyViews() 
     [email protected] 
    } 

    // ... 
} 

संबंधित: भाषा संदर्भ

  • Whats does “[email protected]” mean?

  • में

    • Return at labels आप समारोह लैम्ब्डा के लिए (fetchUpcomingTrips) पारित हो जाता है लेबल के रूप में के नाम का उपयोग कर सकते हैं

    3

    सादा return सुझाव देता है कि आप फ़ंक्शन से वापस आएं। चूंकि आप लैम्ब्डा के अंदर फ़ंक्शन से वापस नहीं आ सकते हैं, इसलिए संकलक शिकायत करेगा। इसके बजाय, आप लैम्ब्डा से वापस जाने के लिए चाहते हैं, और आप एक लेबल का उपयोग करना होगा:

    mainRepo.fetchUpcomingTrips { trips -> 
          if (trips.isEmpty()) { 
           showEmptyViews() 
           [email protected] 
          } 
    
          //run some code if it's not empty 
         } 
    
    1

    रिटर्न हमें एक बाहरी समारोह से वापस जाने के लिए अनुमति देते हैं। सबसे महत्वपूर्ण उपयोग केस लैम्ब्डा अभिव्यक्ति से लौट रहा है

    अज्ञात फ़ंक्शन में एक वापसी विवरण अज्ञात फ़ंक्शन से वापस आ जाएगा।

    fun foo() { 
    ints.forEach(fun(value: Int) { 
        if (value == 0) return // local return to the caller of the anonymous fun, i.e. the forEach loop 
        print(value) 
    }) 
    } 
    

    जब एक मूल्य लौटने, पार्सर योग्य वापसी को प्राथमिकता देता है, यानी

    [email protected] 1 
    

    का अर्थ है "लेबल @a पर लौट 1" और नहीं "एक लेबल अभिव्यक्ति वापसी (@a 1) "। रिटर्न डिफ़ॉल्ट रूप से निकटतम संलग्न कार्य या अज्ञात फ़ंक्शन से रिटर्न देता है।

    ब्रेक निकटतम संलग्न लूप को समाप्त करता है।

    जारी रखें निकटतम संलग्न लूप के अगले चरण तक पहुंच जाता है।

    अधिक जानकारी के लिए देखें Returns and Jumps,Break and Continue Labels

    0

    return के लिए एक वैकल्पिक हो सकता है

    mainRepo.fetchUpcomingTrips { trips -> 
          if (trips.isEmpty()) 
           showEmptyViews() 
          else { 
           //run some code if it's not empty 
          } 
         } 
    
    संबंधित मुद्दे