android - 我们如何在没有 Kotlin 协程中的任何实例的情况下使用 emit() 和 delay() 函数?
问题描述
fun simple(): Flow<Int> = flow {
println("Flow started")
for (i in 1..3) {
delay(100)
emit(i)
}
}
fun main() = runBlocking<Unit> {
println("Calling simple
functionn...")
val flow = simple()
println("Calling collect...")
flow.collect { value ->
println(value) }
println("Calling collect
again...")
flow.collect { value ->
println(value) }
}
要调用类中的函数,我们使用类的 Object with 。运算符,但在 Kotlin 协程中,我们如何在不使用任何对象的情况下使用 emit() 和 delay() 函数(如上面的代码所示)?
解决方案
这里有两个不同的东西。
流通情况的emit()
内侧
为该范围定义了一个接收器。在 Kotlin 中,函数类型(如(Int) -> Int
)也可以采用“接收器”,如下所示SomeObject.(Int) -> Int
:这意味着当调用该 lambda 时,将传递一个 SomeObject 实例,并将充当隐式“this”,默认情况下将“接受”调用。您可以在此处阅读更多相关信息:https ://kotlinlang.org/docs/lambdas.html#function-types
delay()
案例_
这要简单得多。Kotlin 支持全局函数。与类没有真正关联的函数(在内部,Kotlin 编译器将创建一个类并将这些函数作为静态方法放在那里)。你可以Ctrl-Clickdelay
看看是怎么定义的。
推荐阅读
- javascript - 如何在 Java Selenium 中处理下拉列表中的动态元素
- javascript - 模块联合和 React 上下文挂钩
- node.js - Elasticsearch 和 Strapi:如何使用 Strapi cms 创建“geo_point”类型字段
- angular - RXJS如何组合算子?
- python - 如何使用 Python 的“MIME 处理包”发送电子邮件?
- python - 处理 Project Euler 问题的 Python 代码时出现内存错误
- r - 如何在 data.table 中链接 group_by、filter、distinct、count?
- c# - 保存前 C# 配置命令 AppSettings
- sqlite - 从单个 .csv 文件插入多个表
- ios - 如何获得与 StoreKit 2 的交易以出示退款单?