kotlin - 从 Kotlin 中的 `buildSequence` 返回
问题描述
我正在使用buildSequence
Kotlin 中的函数。如何在函数中间结束迭代?我正在寻找类似于 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
辅助函数中返回。错误消息并没有太大帮助...
解决方案
只需使用return@buildSequence
,它是来自 lambda的标记return
,而未标记则return
意味着“从函数返回foo
”。
另请参阅:“return@”是什么意思?
推荐阅读
- javascript - 如何正确更改状态?(只读错误)
- java - SpringBoot如何通过嵌套属性查找记录
- android - 是否可以像命令一样向另一个应用程序发送意图,告诉它要做什么?
- docker - 每个组使用一个角色并将主机两次分配给一个组
- php - PHP - 创建一个函数,该函数返回 n-1 次零以及传递的参数
- javascript - 当我只选择一个时如何防止其他显示条目工作
- jmeter - Corda 性能工具 - 多个 jmeter 服务器的设置
- javascript - Rails API SSL 问题:将 https 与 ReactJS 客户端一起使用时出现“没有合适的密钥共享”
- java - 如何为另一个数组列表复制 Collection.sort
- xcode - Xcode 11 Beta 4 存档错误