我注意到,协同服务的一些函数被标记为actual关键字。
来自文档
实际表示多平台项目中特定于平台的实现。
据我从文档了解,actual关键字用于多平台项目,应该与expect关键字成对工作。
就像这样:
共同模块:
package org.jetbrains.foo
expect class Foo(bar: String) {
fun frob()
}
fun main(args: Array<String>) {
Foo("Hello").frob()
}相应模块:
package org.jetbrains.foo
actual class Foo actual constructor(val bar: String) {
actual fun frob() {
println("Frobbing the $bar")
}
}那个案子很清楚。
但是在包kotlinx.coroutines.experimental中,我注意到一些函数(如launch或withContext )被标记为actual,但是包中没有expect函数。
那么,actual关键字没有 expect的目的是什么?
发布于 2018-02-14 19:41:56
发布于 2022-04-11 18:35:03
当另一个答案中的源代码有所帮助时,我发现此页 (在上面的评论中提到的@jim页面上链接)更有帮助。
具体而言,这一段:
如果您正在开发一个需要访问实现所需功能的特定于平台的API(例如,生成一个UUID)的多平台应用程序,请使用预期声明和实际声明的Kotlin机制。 使用这种机制,公共源集定义了预期的声明,平台源集必须提供与预期声明相对应的实际声明。这适用于大多数Kotlin声明,例如函数、类、接口、枚举、属性和注释。

编译器确保公共模块中每一个标记为expect关键字的声明在所有平台模块中都有标记为actual关键字的相应声明。IDE提供了帮助您创建缺少的实际声明的工具。
同样,要获得更多信息,您可以访问此页。
https://stackoverflow.com/questions/48794879
复制相似问题