对协程范围构造函数语法感到困惑

ktv*_*ktv 3 kotlin

我不明白协程构造函数的语法。

private val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)
Run Code Online (Sandbox Code Playgroud)

我知道参数需要 Coroutine Context 类。我不明白的是我们如何添加 2 个不同的对象?Dispatchers.Main 类是 MainCoroutineDispatcher,viewModelJob 类是 Job。有什么解释吗?

Ren*_*ene 5

CoroutineScope 不是构造函数而是函数,定义为:

public fun CoroutineScope(context: CoroutineContext): CoroutineScope = ...
Run Code Online (Sandbox Code Playgroud)

参数是接口CoroutineContext,它本身定义了一个加号运算符:

public operator fun plus(context: CoroutineContext): CoroutineContext = ...
Run Code Online (Sandbox Code Playgroud)

plus操作返回另一个CoroutineContextDispatchers.MainJob实现接口CoroutineContext

也就是说, Dispatchers.Main + viewModelJob是调用plusthat 构造了另一个CoroutineContext. 内部这会导致两个实例的集合。