从lambdas或Kotlin返回:“返回”不允许在这里

我正在写函数,它会告诉我,字符串是好的,好意味着字符串中至少有一个字母重复的字符串。 但是我不能从lambda返回,它总是返回false,虽然条件在if语句通过。 有人可以解释我怎么回报?

我试图写回报,但IDEA给了我Kotlin的消息:’返回’是不允许在这里

fun main(args: Array) { 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() } 

输出是:

 dd false 

你可以标签lambda然后使用标签返回:

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

或者你可以使用命名的本地函数,如果你不需要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() } 

你不能在一个lambda中做一个非本地返回,但是你可以把你的lambda改成一个匿名函数:

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