2017-01-12 48 views
11

में लैम्ब्डा से लागू वापसी ऐसा लगता है कि लैम्ब्डा की आखिरी पंक्ति हमेशा उस मान को वापस कर देती है भले ही आप return कथन छोड़ दें। क्या ये सही है? क्या यह कहीं भी दस्तावेज है?कोटलिन

fun main(args: Array<String>) { 
    val nums = arrayOf(1, 2, 3) 
    val numsPlusOne = nums.map { it -> 
     val r = it + 1 
     r 
    } 
    // numsPlusOne = [2, 3, 4] 
} 
+2

बस एक सहायक संकेत, आप इसे 'वैल numsPlusOne = nums.map {it + 1}' (क्योंकि 'निर्दिष्ट 'निर्दिष्ट नहीं किया गया है, और यदि यह + 1' अंतिम पंक्ति है, तो इसे छोटा कर सकता है, इसकी परिणाम @hotkey समझाया जाएगा के रूप में वापस किया जाएगा) –

उत्तर

24

हां, यह सही है, अगर लैम्ब्डा का अंतिम विवरण अभिव्यक्ति है, तो इसे इसके वापसी मूल्य माना जाता है।

हम स्पष्ट रूप से लैम्ब्डा qualified return सिंटेक्स के उपयोग से कोई मान लौट सकते हैं:

यहाँ what the reference says (@KirillRakhman धन्यवाद) है। अन्यथा, अंतिम अभिव्यक्ति का मूल्य आंशिक रूप से वापस आ गया है। इसलिए, दो निम्नलिखित के टुकड़े के बराबर हैं:

ints.filter { 
    val shouldFilter = it > 0 
    shouldFilter 
} 

ints.filter { 
    val shouldFilter = it > 0 
    [email protected] shouldFilter 
} 

पिछले बयान अर्थ विज्ञान if (that's why there's no ternary operator), when और try-catch ब्लॉकों के लिए भी सही है, और इन बयानों भाव खुद को कर रहे हैं:

val foo = if (bar) { 
    doSomething() 
    baz 
} else { 
    doSomethingElse() 
    qux 
} 

यह भी देखें: examples for when and try-catch

तो, लैम्बडा इस संबंध में भाषा संरचनाओं के अनुरूप हैं।


आप एक लैम्ब्डा में स्पष्ट return बयान बनाना चाहते हैं, का उपयोग [email protected] syntax (भी another answer with examples)। गैर लेबल वाले return, इसके विपरीत, निकटतम fun (लैम्बडास को अनदेखा कर) के साथ काम करता है और इस प्रकार केवल उन लैम्बडा में हो सकता है जो inlined हैं।

एक language proposal एक कोड ब्लॉक से एक मूल्य के उत्सर्जन के लिए विशेष सिंटेक्स जोड़ने के लिए था, लेकिन इसे अस्वीकार कर दिया गया था।