首页 > 解决方案 > 从 Kotlin 中的 `buildSequence` 返回

问题描述

我正在使用buildSequenceKotlin 中的函数。如何在函数中间结束迭代?我正在寻找类似于 C#yield break声明的东西。

我的代码如下所示。我被困在TODO.

fun foo(list:List<Number>): Sequence<Number> = buildSequence {
    if (someCondition) {
        // TODO: Bail out early with an empty sequence
        // return doesn't seem to work....
    }

    list.forEach {
        yield(someProcessing(it))
    }
}

编辑

显然,我误诊了来源。问题不是从buildSequence函数返回。以下对我有用:

fun foo(list:List<Number>): Sequence<Number> = buildSequence {
    return@buildSequence

    list.forEach {
        yield(someProcessing(it))
    }
}

编辑 2

问题是我将它放入了一个本地辅助函数中,该函数在(因此是辅助函数)return中的多个点验证数据。buildSequence显然我无法从buildSequence辅助函数中返回。错误消息并没有太大帮助...

标签: kotlincoroutine

解决方案


只需使用return@buildSequence,它是来自 lambda的标记return,而未标记则return意味着“从函数返回foo”。

另请参阅:“return@”是什么意思?


推荐阅读