Ale*_*nov 5 coroutine kotlin kotlin-coroutines
My question is rather theoretical. I am quite new to kotlin (only passed the tutorial, didn't write any real code).
通过阅读语言参考,我发现自己对“暂停”是关键字这一事实感到困惑,但是在关键字列表中找不到“启动”之类的东西。这使我认为存在一些不对称性-“挂起”是编译器功能,而“启动”是库功能。我的理解正确吗?如果是这样-将两者都实现为库功能还是将两者都实现为编译器功能会更好吗?
我一直认为您总是可以使用可用的语言功能编写自己的标准库,但是我仍然看不到这是否真的适用于这种情况。
TL; DR:我可以使用纯Kotlin启动协程,而无需导入任何库(无论多么丑陋)吗?
我可以使用纯 kotlin 启动一个协程,而不导入任何库(无论那有多难看)吗?
不。所有协程生成器都位于库内kotlinx.coroutines
,因此您至少需要它。现在,从理论上讲,您可以自己重新实现此功能。但也许你不应该。
对于 StackOverflow 的答案来说,如何做到这一点有点太长了,但请尝试从 Java 调用此 Kotlin 类的方法:
class AsyncWorks {
suspend fun print() {
println("Hello")
}
}
Run Code Online (Sandbox Code Playgroud)
您会看到,虽然 Kotlin 方法没有参数,但在 Java 中它需要Continuation<? super Unit>
. 这就是suspend
关键字的作用。Continuation<T>
它作为我们函数的最后一个参数添加。
将两者都实现为库功能或同时实现为编译器功能不是更好吗?
理想情况下,您希望所有内容都成为“库功能”,因为它更容易发展。从语言中删除关键字非常困难。理论上,suspend
可以避免使用having 作为关键字。Quasar作为一个框架,使用注释来代替。另一方面,Go 编程语言假设所有函数都是可挂起的。所有这些方法都有其优点和缺点。
Kotlin 决定务实一点,添加suspend
关键字,将决定权留给开发人员。如果您对这个主题感兴趣,我强烈推荐 Kotlin 协程的作者 Roman Elizarov 的演讲,其中解释了他们的决定:https://www.youtube.com/watch ?v=Mj5P47F6nJg
归档时间: |
|
查看次数: |
86 次 |
最近记录: |