Regreso de lambdas o Kotlin: 'return' no está permitido aquí

Estoy intentando escribir una function que me dirá que la string es bonita, bonita significa que la string tiene al less una repetición de letras en la string. Pero no puedo hacer el retorno de lambda, siempre devuelve falso, aunque se pasa la condición en if. ¿Puede alguien explicarme cómo hacer para volver?

Intenté escribir el retorno, pero IDEA me dio el post de Kotlin: "retorno" no está permitido aquí

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() } 

La salida es:

 dd false 

Puede labelr lambda y luego usar return labeldo:

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

o puede usar la function local con nombre, si no necesita hasRepeat para ser una reference de function:

 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() } 

No puede hacer un retorno no local dentro de un lambda pero puede cambiar su lambda a una function anónima:

 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() }