我正在尝试编写函数,它会告诉我字符串很好,很好意味着字符串在字符串中至少有一个重复的字母。但我不能从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
答案 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;
}