首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin中实际关键字的用途是什么?

Kotlin中实际关键字的用途是什么?
EN

Stack Overflow用户
提问于 2018-02-14 19:35:05
回答 2查看 8.1K关注 0票数 30

我注意到,协同服务的一些函数被标记为actual关键字。

来自文档

实际表示多平台项目中特定于平台的实现。

据我从文档了解,actual关键字用于多平台项目,应该与expect关键字成对工作。

就像这样:

共同模块:

代码语言:javascript
复制
package org.jetbrains.foo

expect class Foo(bar: String) {
    fun frob()
}

fun main(args: Array<String>) {
    Foo("Hello").frob()
}

相应模块:

代码语言:javascript
复制
package org.jetbrains.foo

actual class Foo actual constructor(val bar: String) {
    actual fun frob() {
        println("Frobbing the $bar")
    }
}

那个案子很清楚。

但是在包kotlinx.coroutines.experimental中,我注意到一些函数(如launchwithContext )被标记为actual,但是包中没有expect函数。

那么,actual关键字没有 expect的目的是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-14 19:41:56

kotlinx.coroutines库实际上使用了多平台项目,因为它同时支持JVM和JS编译目标。

您可以找到通用模块这里,以及您提到的这里函数的特定expect声明。

票数 16
EN

Stack Overflow用户

发布于 2022-04-11 18:35:03

当另一个答案中的源代码有所帮助时,我发现此页 (在上面的评论中提到的@jim页面上链接)更有帮助。

具体而言,这一段:

如果您正在开发一个需要访问实现所需功能的特定于平台的API(例如,生成一个UUID)的多平台应用程序,请使用预期声明和实际声明的Kotlin机制。 使用这种机制,公共源集定义了预期的声明,平台源集必须提供与预期声明相对应的实际声明。这适用于大多数Kotlin声明,例如函数、类、接口、枚举、属性和注释。

编译器确保公共模块中每一个标记为expect关键字的声明在所有平台模块中都有标记为actual关键字的相应声明。IDE提供了帮助您创建缺少的实际声明的工具。

同样,要获得更多信息,您可以访问此页

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48794879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档