从lambdas或Kotlin回来:'返回'这里不允许

时间:2016-09-30 18:53:19

标签: kotlin

我正在尝试编写函数,它会告诉我字符串很好,很好意味着字符串在字符串中至少有一个重复的字母。但我不能从lambda返回,它总是返回false,尽管if语句中的条件已经过去了。有人可以解释一下如何返回吗?

我曾尝试写回复,但IDEA给了我消息 Kotlin:' return'这里不允许

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

输出是:

dd
false

2 个答案:

答案 0 :(得分:32)

您可以标记lambda,然后使用带标签的return:

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

答案 1 :(得分:9)

您无法在lambda中执行non-local return,但可以将lambda更改为匿名函数:

#navList {
  display:flex;
}
#navList li {
  flex:1 auto;
}