tutorial - Regreso de las lambdas o Kotlin: "retorno" no está permitido aquí
kotlin vs java (2)
No puede hacer una devolución no local dentro de un lambda pero puede cambiar su lambda a una función 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()
}
Estoy tratando de escribir una función que me diga que la cadena es buena, buena significa que la cadena tiene al menos una repetición de letras en la cadena. Pero no puedo hacer un retorno de lambda, siempre se devuelve falso, aunque se cumpla la condición de la declaración. ¿Alguien me puede explicar cómo hacer volver?
He intentado escribir el retorno, pero IDEA me dio el mensaje 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()
}
ouput es:
dd
false
Puede etiquetar lambda y luego usar la devolución etiquetada:
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 una función local nombrada, si no necesita que hasRepeat
sea una referencia de función:
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()
}