首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

无法让我的第一个Kotlin协程函数工作

Kotlin协程是一种轻量级的并发编程框架,用于简化异步编程和多线程操作。它通过提供一种简洁的语法和强大的并发原语,使开发人员能够编写更具可读性和可维护性的异步代码。

在使用Kotlin协程时,确保以下几点可以帮助您解决无法让第一个Kotlin协程函数工作的问题:

  1. 导入协程库:首先,确保您的项目中已正确导入Kotlin协程库。您可以使用Gradle或Maven将协程库添加到项目的依赖项中。例如,在Gradle中,您可以添加以下依赖项:
代码语言:txt
复制
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
  1. 使用协程作用域:在Kotlin中,协程需要在协程作用域中运行。您可以使用runBlocking函数创建一个顶级协程作用域,或者使用CoroutineScope接口创建自定义作用域。确保您的协程函数在正确的作用域中运行。
代码语言:txt
复制
import kotlinx.coroutines.*

fun main() {
    runBlocking {
        // 在这里编写您的协程代码
    }
}
  1. 使用suspend修饰符:在定义协程函数时,使用suspend修饰符将其标记为可挂起函数。这样,您就可以在协程中使用挂起函数,例如delaywithContext
代码语言:txt
复制
suspend fun myCoroutineFunction() {
    // 在这里编写您的协程代码
}
  1. 启动协程:在协程作用域中,您可以使用launchasync函数启动协程。launch函数用于启动一个不返回结果的协程,而async函数用于启动一个返回结果的协程。
代码语言:txt
复制
runBlocking {
    launch {
        // 在这里编写您的协程代码
    }
    
    val result = async {
        // 在这里编写您的协程代码,并返回结果
        "Hello, World!"
    }
    
    println(result.await()) // 打印协程返回的结果
}
  1. 处理异常:在协程中,您可以使用try-catch块来捕获和处理异常。确保在协程函数中适当地处理可能发生的异常。
代码语言:txt
复制
suspend fun myCoroutineFunction() {
    try {
        // 在这里编写您的协程代码
    } catch (e: Exception) {
        // 处理异常
    }
}

总结起来,要让您的第一个Kotlin协程函数工作,您需要导入协程库,使用协程作用域,使用suspend修饰符定义协程函数,启动协程,并适当地处理异常。通过遵循这些步骤,您应该能够成功运行您的第一个Kotlin协程函数。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云函数计算(云函数):腾讯云函数计算是一种事件驱动的无服务器计算服务,支持使用多种编程语言编写函数,无需关心服务器运维。详情请参考:腾讯云函数计算
  • 腾讯云容器服务(TKE):腾讯云容器服务是一种高度可扩展的容器管理服务,支持容器化应用的部署、运行和管理。详情请参考:腾讯云容器服务
  • 腾讯云数据库(TencentDB):腾讯云数据库是一种高性能、可扩展的云数据库服务,支持多种数据库引擎和存储引擎,提供可靠的数据存储和访问能力。详情请参考:腾讯云数据库
  • 腾讯云安全组:腾讯云安全组是一种网络安全防护服务,用于管理云服务器的入站和出站流量,提供网络访问控制和防火墙功能。详情请参考:腾讯云安全组
  • 腾讯云直播(云直播):腾讯云直播是一种实时音视频直播服务,提供高可用、低延迟的音视频传输和分发能力,适用于各种直播场景。详情请参考:腾讯云直播
  • 腾讯云人工智能(AI):腾讯云人工智能是一种集成了多种人工智能技术的云服务,包括图像识别、语音识别、自然语言处理等,可用于构建智能应用。详情请参考:腾讯云人工智能
  • 腾讯云物联网(IoT):腾讯云物联网是一种连接和管理物联网设备的云服务,提供设备接入、数据采集、远程控制等功能,支持构建智能物联网解决方案。详情请参考:腾讯云物联网
  • 腾讯云移动开发(移动推送):腾讯云移动开发是一种提供移动应用开发和运营支持的云服务,包括移动推送、移动分析、移动测试等功能,帮助开发者构建和管理移动应用。详情请参考:腾讯云移动开发
  • 腾讯云对象存储(COS):腾讯云对象存储是一种高可用、高可靠的云存储服务,用于存储和管理海量的非结构化数据,适用于各种数据存储需求。详情请参考:腾讯云对象存储
  • 腾讯云区块链(BCS):腾讯云区块链是一种基于区块链技术的云服务,提供区块链网络搭建、智能合约开发和部署、链上数据存储等功能,支持构建可信赖的区块链应用。详情请参考:腾讯云区块链
  • 腾讯云虚拟专用网络(VPC):腾讯云虚拟专用网络是一种隔离和扩展的云上私有网络,用于构建安全可靠的云上网络环境,支持自定义IP地址范围、子网划分、路由配置等。详情请参考:腾讯云虚拟专用网络

请注意,以上提到的腾讯云产品仅作为示例,您可以根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin 挂起和恢复 ① ( 挂起和恢复概念 | suspend 挂起函数 )

文章目录 一、挂起和恢复概念 二、 suspend 挂起函数 一、挂起和恢复概念 ---- 函数 最基本操作 是 : 调用 call : 通过 函数名或函数地址 调用函数 ; 返回...return : 函数执行完毕后 , 继续执行函数调用下一行代码 ; 在 调用 call 和 返回 return 基础上 , 又新增了两种 状态 : 挂起 Suspend : 暂停当前执行..., 在子线程中执行异步任务后 , 会马上执行后续代码 , 只是相当于 普通多线程操作 ; 作用就是 可以 顺序地执行 异步任务 和 主线程任务 , 其执行顺序按照代码顺序执行 ; 挂起 函数..., 只能在 体内部 或者 其它挂起函数 中调用 ; 外部不允许使用挂起函数 ; 在中 , 执行 挂起 Suspend 函数 , 将 挂起点信息 记录下来 , 然后执行耗时操作 , 执行完毕后...){} 中 , 可以直接调用挂起函数 ; 挂起 函数 , 只能在 体内部 或者 其它挂起函数 中调用 ; 外部不允许使用挂起函数 ; 在中 , 执行 挂起 Suspend 函数 , 将 挂起点信息

1.6K40

Kotlin 取消 ③ ( finally 释放资源 | 使用 use 函数执行 Closeable 对象释放资源操作 | 构造无法取消任务 | 构造超时取消任务 )

文章目录 一、释放资源 二、使用 use 函数执行 Closeable 对象释放资源操作 三、使用 withContext(NonCancellable) 构造无法取消任务 四、使用 withTimeoutOrNull...函数构造超时取消任务 一、释放资源 ---- 如果 中途取消 , 期间需要 释放占有的资源 ; 如果执行任务中 , 需要 执行 关闭文件 , 输入输出流 等操作 , 推荐使用...null; cb = null; } } } } 三、使用 withContext(NonCancellable) 构造无法取消任务...挂起函数以及之后代码将不会被执行 ; 使用 withContext(NonCancellable) {} 代码块 , 可以构造一个无法取消任务 , 这样可以避免 finally 中代码无法完全执行...23:12:32.093 I 退出作用域 四、使用 withTimeoutOrNull 函数构造超时取消任务 ---- 使用 withTimeout 函数 , 可以构造超时取消任务

1.3K10
  • LiveData:还没普及就让去世?去你 Kotlin

    网络请求这个就不用说了,RxJava 配合 Retrofit 来做网络请求,各种复杂操作和线程切换,谁用谁知道——现在用就可以了,比 RxJava 方便;而 event bus,当时比较火是两个开源库...要说KotlinKotlin 在 2017 得到了 Android 官方公开支持,在接下来这几年里,Kotlin 自身越来越完善,它也越来越完善。... Flow 和 RxJava 功能范围非常相似——其实觉得就是一样——但是 Flow 是里必不可少一部分,而Kotlin 里必不可少一部分,而 Kotlin 是 Android...视频(文章)开头那个问题,Yigit 回答是:LiveData 不会被废弃,因为两个原因: 用 Java 写 Android 的人还需要它——Flow 是东西,所以如果你是用 Java ,那其实没办法用...另一方面,在用 LiveData 的人,确实可以考虑摘除它了;但也不是着急忙慌地把它拿走,它不是毒药不是地雷,只是 Flow 现在可以做这件事了,而未来 Flow 一定是会成为主流,就像现在

    93050

    Kotlin 多路复用技术 ② ( select 函数原型 | SelectClauseN 事件 | 查看挂起函数是否支持 select )

    一、select 函数原型 ---- 在上一篇博客 【Kotlin 多路复用技术 ① ( 多路复用技术 | await 多路复用 | Channel 通道多路复用 ) 中 , 介绍了...多路复用技术 , 多路复用 主要使用 select 代码块 实现 , 在 select 代码块中 调用多个协 onAwait 函数 , 哪个协先返回数据 , 就选择该数据作为返回值 ;...* * 这个选择函数是_biased_到第一个子句。当可以同时选择多个子句时, * 第一个有优先权。使用[selectUnbiased]表示无偏(随机)选择 * 条款。...如果当前[Job]被取消或完成 * 函数挂起后,该函数立即恢复[CancellationException]。 * 有**立即取消保证**。...如果作业被取消,而此函数被取消 * 暂停,将无法成功恢复。参见[suspendCancellableCoroutine]文档了解底层细节。 * * 注意,该函数在未挂起时不会检查是否取消。

    1.1K20

    Kotlin 】Flow 异步流 ⑥ ( 调用 Flow#launchIn 函数指定流收集 | 通过取消流收集所在取消流 )

    文章目录 一、调用 Flow#launchIn 函数指定流收集 1、指定流收集 2、Flow#launchIn 函数原型 3、代码示例 二、通过取消流收集所在取消流 一、调用 Flow...#launchIn 函数指定流收集 ---- 1、指定流收集 响应式编程 , 是 基于事件驱动 , 在 Flow 流中会产生源源不断事件 , 就是 发射元素操作 ; 拿到 Flow 流后..., 开始 收集元素 , 按照顺序逐个处理产生事件 ( 元素 ) ; 调用 Flow#launchIn 函数 , 传入 作用域 作为参数 , 可以 指定 收集 Flow 流元素 ; 在上一篇博客...【Kotlin 】Flow 异步流 ⑤ 中 , 调用 Flow#flowOn 函数 , 可以 指定 Flow 流发射元素 ; Flow#launchIn 函数返回值是 Job 对象 ,...是 任务对象 , 可调用 Job#cancel 函数取消该任务 ; 2、Flow#launchIn 函数原型 Flow#launchIn 函数原型 : /** * 终端流操作符,在[作用域]中

    79720

    Kotlin 异常处理 ⑤ ( 异常传播特殊情况 | 取消子示例 | 子抛出异常后父处理异常时机示例 | 异常聚合 | 多个子抛出异常会聚合到第一个异常中 )

    文章目录 一、异常传播特殊情况 1、取消子示例 2、子抛出异常后父处理异常时机示例 二、异常聚合 ( 多个子抛出异常会聚合到第一个异常中 ) 一、异常传播特殊情况 ---- 在...; ③ 向父传播异常 : 继续将异常传播给 父 ; 但是也有特殊情况 : 调用 Job#cancel() 函数 进行取消操作时 , 会 抛出 CancellationException...使用 launch 构建器 创建了子 , 注意 如果想要子运行 , 必须在创建完子后 调用 yield() 函数 , 渡线程执行权 , 也就是令 子 执行起来 , 否则...} } // 执行权, 执行 yield() Log.i...二、异常聚合 ( 多个子抛出异常会聚合到第一个异常中 ) ---- 父 中 有多个 子 , 这些子 都 抛出了 异常 , 此时 只会处理 第一个 异常 ; 这是因为 多个 子

    73310

    破解 Kotlin (2) - 启动篇

    本文将为大家详细介绍几种启动模式之间不同,当然,不打算现在就开始深入源码剖析原理,大家只需要记住这些规则就能很好使用了。 1....默认为 true,换句话说,这样创造出来线程默认就是启动,除非你实在不想它马上投入工作: val myThread = thread(start = false) { //do what...但在开始运行之前无法取消 UNDISPATCHED 立即在当前线程执行体,直到第一个 suspend 调用 LAZY 只有在需要情况下运行 2.1 DEFAULT 四个启动模式当中我们最常用其实是...对于 ATOMIC 模式,我们已经讨论过它一定会被启动,实际上在遇到第一个挂起点之前,它执行是不会停止,而 delay 是一个 suspend 函数,这时我们迎来了自己第一个挂起点,恰好 delay...我们在前面提到我们示例都运行在 suspend main 函数当中,所以 suspend main 函数会帮我们直接启动一个,而我们示例都是它,所以这里 5 调度取决于这个最外层调度规则了

    99130

    Kotlin 】Flow 异步流 ④ ( 流构建器函数 | flow 构建器函数 | flowOf 构建器函数 | asFlow 构建器函数 )

    文章目录 一、流构建器函数 1、flow 构建器 2、flowOf 构建器 3、asFlow 构建器 一、流构建器函数 ---- 1、flow 构建器 在之前博客 【Kotlin 】Flow...异步流 ② ( 使用 Flow 异步流持续获取不同返回值 | Flow 异步流获取返回值方式与其它方式对比 | 在 Android 中使用 Flow 异步流下载文件 ) 【Kotlin 】Flow...挂起 500ms // 在中, 该挂起操作不会阻塞调用线程, 会继续执行其它代码指令 // 500ms 恢复执行, 继续执行挂起函数之后后续代码指令...发射元素 , 然后在外部 调用 Flow#collect 函数 收集元素 ; 2、flowOf 构建器 使用 flowOf 构建器函数 , 可以创建一个 发射指定元素 Flow 异步流 ; 代码示例...super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 携中调用挂起函数返回一个

    48810

    写了一本书,《深入理解 Kotlin

    研究 Kotlin 过程其实主要分了三个阶段。 第一个阶段,深入理解 Kotlin 三篇文章。...这本书主要回答了以下几个常见问题: 是什么?Kotlin 又是什么? Kotlin 工作机制是怎样? 如何将 Kotlin 投入生产实践当中?...不仅如此,本书还致力于大家能够自己尝试动手实现自己框架,成为深谙 Kotlin 程之道高手,这样才配得上“深入理解”这个标题。 还有一个小细节。...除了使用 Haskell 编写 Pandoc 插件 cross-ref 实在无法快速上手以外,学习到了如何使用 Python 和 Lua 编写用来在编译过程中处理图片生成逻辑和文字预处理 Pandoc...可以说,这一本书编写过程,除了促使Kotlin 有了一个更加宏观概念把控之外,还学到了非常多有意思东西。

    1.3K10

    Kotlin 】Flow 异步流 ⑤ ( 流上下文 | 上下文保存 | 查看流发射和收集 | 不能在不同中执行流发射和收集操作 | 修改流发射上下文 | flowOn函数 )

    文章目录 一、流上下文 1、上下文保存 2、流收集函数原型 3、流发射函数原型 4、代码示例 - 查看流发射和收集 5、代码示例 - 不能在不同中执行相同流发射和收集操作 二、修改流发射上下文...1、Flow#flowOn 函数原型 2、代码示例 一、流上下文 ---- 1、上下文保存 Flow 异步流 收集元素 操作 , 一般是在 上下文 中进行 , 如 : 在中调用 Flow...#collect 函数 , 收集元素 ; 收集元素 时 上下文 , 会 传递给 发射元素 流构建器 , 作为 流构建器 上下文 ; Flow 异步流 在 收集元素 时 , 才调用 流构建器...中代码 , 收集元素操作在中执行 , 流构建器 也同样在相同中运行 ; 流收集元素 和 发射元素 在相同上下文中 属性 , 称为 上下文保存 ; 2、流收集函数原型 Flow#collect...上下文中执行 流发射操作 ; 1、Flow#flowOn 函数原型 Flow#flowOn 函数原型如下 : /** * 将此流执行上下文更改为给定[context]。

    91210

    干货 | KotlinNative 异步并发模型初探

    2)Kotlin/Native 自身提供给了我们两套异步并发 API,首先是,但 Kotlin/Native Kotlin/JVM区别很大,Kotlin/Native 是单线程...官方团队 Roman Elizarov 提到了已经发布了第一个多线程预览版本,这也 Kotlin/Native开发者们看到了官方支持多线程决心。...在主分支版本上,程序无法引用到 newSingleThreadContext() 函数,它曾经是 Kotlin/JVM独有的,但当前 Kotlin/Native 预览版多线程中,newSingleThreadContext...但是在中,我们有自己基于挂起实现锁 Mutex,因此如果要使用 Mutex 来保证并发安全,第一步要做就是变量更改摆脱Worker-对象子图机制,完全将并发风险暴露出来,然后才能通过将有风险代码包裹在...参考文档 参考链接 1:Kotlin 编译器实现主要工作是 CPS 变换与状态机,官方 KEEP: https://github.com/Kotlin/KEEP/blob/master/proposals

    1.7K20

    饿了么资深Android工程师带你领略Kotlin力量

    多线程缺陷在于无法自主控制调度,除开一定会执行主线程之外,其他线程执行顺序都无法控制,在Java上是由Java虚拟机调度,其他平台大多是由系统控制。...第一个是可控制,不同于线程能做到可被控制发起子任务;第二个是轻量级,非常小、占用资源比线程还少,在JVM平台上它本质就是一次方法调用;第三个是语法糖,目前能够使用语言都提供了很好语法糖支持...在Kotlin中如果函数函数体内只有一个语句,那么就可以将这条语句直接赋值给函数声明。另外如果方法只有一个参数且该参数为lambda表达式时候,可以将函数后小括号省略掉。...本质也就是一次回调,只不过通过语法糖形式它看起来像是顺序执行。 切换 ? 上图中每个大括号所包含范围是执行过程。...方法内部this指向doResume传入参数,第一个启动时候this.label默认为0,requestToken方法被调用同时label值被改为1,requestToken执行完之后会通过传入

    2.3K51

    在 Android 开发中使用 | 上手指南

    有两种方式能够启动,它们分别适用于不同场景: launch 构建器适合执行 "一劳永逸" 工作,意思就是说它可以启动新而不将结果返回给调用方; async 构建器可启动新并允许您使用一个名为...通常,您应使用 launch 从常规函数中启动新。因为常规函数无法调用 await (记住,它无法直接调用 suspend 函数),所以将 async 作为主要启动方法没有多大意义。...coroutineScope 和 supervisorScope 可以您安全地从 suspend 函数中启动。...Kotlin 确保使用 coroutineScope 构造器不会 fetchTwoDocs 发生泄漏,coroutinScope 会先将自身挂起,等待它内部启动所有完成,然后再返回。...还记得在一开始说结构化并发是一系列编程语言特性和实践指南集合,在 suspend 函数中引入无关联作用域违背了结构化并发规则。

    1.5K20

    破解 Kotlin 番外篇(1) - 为什么被称为『轻量级线程』?

    因为即便我们把 Kotlin 丢掉,单纯这个东西本身就已经长时间大家感到疑惑了,不信的话可以单独搜一下或者 Coroutine,甚至连 Lua 之父在提到为什么鲜见于早期语言实现,就是因为这概念没有一个清晰界定...goroutine 看上去似乎不像,因为开发者自己无法决定一个挂起和恢复,这个工作是 go 运行时自己处理。...当然,Java 也不是必须,我们只需要用点儿 Kotlin 反射,一样可以直接 suspend 函数现出原形: val helloRef = ::hello val result = helloRef.call...,但如果我们用来承载任务,用极少量线程来承载,那么锁优化就变得简单了:如果无法获取到锁,那么挂起,对应线程就可以让出去运行其他了。...更愿意把作为更贴近业务逻辑甚至人类思考层面的一种抽象,这个抽象层次其实已经比线程更高了。线程可以让我们程序并发跑,可以并发程序跑得看起来更美好。 线程本身就可以,为什么要用呢?

    2K20

    Kotlin---使用异步

    通信 间不能直接通过变量来访问数据,会导致数据原子性问题,所以提供了一套Channel机制来在间传递数据。...目前,在1.3.11版本Kotlin中,produce与consume都还只是实验性功能,没有正式release,使用时记得使用@ExperimentalCoroutinesApi标记使用函数 runBlocking...${Thread.currentThread().name}") } coroutineContext.cancelChildren() // 取消所有子结束 } suspend...它启动了一个单独,这是一个轻量级线程并与其它所有的一起并发工作。...与线程一样,对于数据操作无法保持原子性,所以在中,需要使用原子性数据结构,例如AotimicInteger等,或者使用mutex.withLock,来处理数据原子性 import kotlinx.coroutines

    2.8K20

    Kotlin开篇

    · 核心是什么? · kotlin和其他语言有什么异同? kotlin出现其实比kotlin语言还晚一点。在当前这个版本,甚至都还处于一个不稳定迭代版本中。...存活 } 上面的代码是一个常规启动方式,关键函数只有 launch,delay,这两个函数kotlin独有的。...理解这句话关键在于,干了什么,这个异步操作不会卡主线程? 我们知道类似的技术在RxJava中也有,它通过手动切线程方式指定代码运行所在线程,从而达到不卡主线程目的。...这个问题涉及到KotlinScope,调度,也是实现核心逻辑 Kotlin不是第一个提出 实际上在Kotlin之前就有不少语言实践了这个概念。比如python,golang。...python是基于yield关键字进行二次封装,虽然在高层抽象上也是以函数作为粒度,但对比golang差太远。

    88620

    【翻译】深入 Kotlin

    【翻译】深入 Kotlin 2017-10-26 by Liuqingwen | Tags: Kotlin 翻译 | Hits ? 一、前言 翻译好文章也是一种学习方法!...原文作者:Adrian Bukros 二、正文 编写 Kotlin 相关文章是当下比较流行一个话题,这当然是有极好理由支撑着。...将会指导你使用相关基本示例,并观察背后到底发生了什么。 为什么像这种解决方案非常有必要? 在现代应用程序开发中,处理多线程任务是不可避免工作。...在 C# 5.0 中,追溯到 2012 年,关于异步函数微软提出了一个特性,非常类似 Kotlin: public async Task doWork() { // do some...通过使用 CoroutineStart.LAZY 这个值,可以只在开发者显式调用返回 Deferred 实例或者 Job 实例 await() 方法或者 join() 方法才开始运行。

    1.4K10

    【翻译】Kotlin 1.1 新版本同样适合安卓开发者

    更重要是,今天就要把这些都展示给您,您知道在开发安卓程序过程中是多么爽快。 类型别名:事件监听更具可读性 当然,类型别名是有很多用处。...Kotlin 1.1 中是一个令人振奋新闻。尽管最后发布依然是带有“实验性”包,不过它已经功能齐全并且从今天开始你也可以开始在你项目中使用了!...能够你像写同步代码块一样写异步代码,能够编写流畅代码使得在某刻挂起任务执行以等待结果返回。...辛运是, Kotlin 团队开发极其迅速,已经有好些库把威力带到了安卓开发中。...这里有几个例子: 第一个是你很可能希望看到 Jetbrains 官方提供库: kotlinx-coroutines-android ,这个库实现了在安卓中使用。

    1.1K60

    利用Kotlin实现简单异步加载详解

    在本篇文章中呢想给大家分享是使用KotlinCoroutine()来实现耗时操作异步加载,现在有RxJava这么屌库我们为什么还要了解这个呢?...在第一个里边我们又调用了launch(UI)创建并启动了一个新,这儿UI并不是我们自己创建,他是Kotlin在Android平台里边预定义一个CoroutineContext,代表着在UI...我们在这个新中调用了then函数中传入名叫blocklambda表达式并使用await()函数作为它参数。...一旦ActivityonDestroy方法被调用时候,我们在load()函数中添加lifecycle观察者将会取消第一个,也会使第二个被取消,避免block()被调用。...和RxJava这种框架比起来Kotlin可能没有它那么强大。但是Kotlin可读性更强,也更简单。现在你可以安全使用它来执行你异步操作了,再也不用担心内存泄漏发生了。

    2.1K20

    JetBrains首席语言设计师:我们将如何Kotlin再活几十年

    Kotlin (Coroutines)是在该语言 1.0 稳定版本之后才添加进来,并在 2017 年推出了第一个实验性支持。...Kotlin 深受 C#  async/await 启发,但最终 Kotlin 设计却与 Onward 2021《Kotlin :设计和实现》中所解释有很大差异。...例如,当 Kotlin Kotlin 1.3 中变得稳定时,它们引入了一个新函数类——挂起函数和相应挂起函数类型。然而,不允许将挂起函数类型用作超类型。...这是后来在 Kotlin 1.6 中添加,因为使用变得越来越多,并且对实现此特性交互需求也越来越多(请参阅 KT-18707 支持将挂起函数作为超类型)。...自 2016 年以来,他一直在 JetBrains 从事 Kotlin 相关工作,并对 Kotlin 设计和 Kotlin 开发做出了贡献。

    1.6K10
    领券