2016-09-30 10 views
11

मैं फ़ंक्शन लिखने की कोशिश कर रहा हूं जो मुझे बताएगा कि स्ट्रिंग अच्छा है, अच्छा मतलब स्ट्रिंग में स्ट्रिंग में कम से कम एक अक्षरों का दोहराव है। लेकिन मैं लैम्ब्डा से वापसी नहीं कर सकता, यह हमेशा झूठी वापसी करता है, हालांकि अगर कथन में शर्त पारित होती है। क्या कोई मुझे समझा सकता है कि वापसी कैसे करें?लैम्बडास या कोटलिन से लौटें: 'वापसी' की अनुमति नहीं है

मैं वापसी लिखने की कोशिश की है, लेकिन यह विचार मुझे संदेश Kotlin दिया: 'वापसी' यहाँ की अनुमति नहीं है

fun main(args: Array<String>) { 
    println("sddfsdf".isNice()) 
} 

fun String.isNice(): Boolean { 
    val hasRepeat = { 
     for (i in 0 .. (length - 2)) { 
      if (subSequence(i, i + 2).toSet().size == 1) { 
       true 
       println(subSequence(i, i + 2)) 
      } 
     } 
     false 
    } 

    return hasRepeat() 
} 

ouput है:

dd 
false 

उत्तर

15

आप लैम्ब्डा लेबल कर सकते हैं और उसके बाद लेबल वापसी का उपयोग करें:

fun String.isNice(): Boolean { 
    val hasRepeat = [email protected] { 
     for (i in 0 .. (length - 2)) { 
      if (subSequence(i, i + 2).toSet().size == 1) { 
       [email protected] true 
       println(subSequence(i, i + 2)) // <-- note that this line is unreachable 
      } 
     } 
     false 
    } 

    return hasRepeat() 
} 

या आप स्थानीय समारोह नामित उपयोग कर सकते हैं, यदि आप hasRepeat की जरूरत नहीं है समारोह संदर्भ होने के लिए:

fun String.isNice(): Boolean { 
    fun hasRepeat(): Boolean { 
     for (i in 0 .. (length - 2)) { 
      if (subSequence(i, i + 2).toSet().size == 1) { 
       return true 
      } 
     } 
     return false 
    } 

    return hasRepeat() 
} 
+0

धन्यवाद, आपका उत्तर मुझे इस प्रश्न के बारे में कुछ अतिरिक्त स्पष्टीकरण भी देता है। –

7

आप एक non-local return ऐसा नहीं कर सकते एक लैम्ब्डा के अंदर लेकिन आप अपना लैम्ब्डा किसी अज्ञात फ़ंक्शन में बदल सकते हैं:

fun String.isNice(): Boolean { 
    val hasRepeat = fun(): Boolean { 
     for (i in 0..(length - 2)) { 
      if (subSequence(i, i + 2).toSet().size == 1) { 
       return true 
      } 
     } 
     return false 
    } 

    return hasRepeat() 
} 
+0

धन्यवाद, लेकिन यह सिर्फ उदाहरण दिया गया है , मुझे पता है, कि मैं इस समारोह को isice() स्तर पर रख सकता हूं, वैसे भी धन्यवाद। –

+0

समझ गया। मैंने अनावश्यक सरलीकृत उदाहरण को हटाने के लिए अपना जवाब अपडेट कर लिया है। – mfulton26

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