对协程作用域构造函数语法感到困惑

时间:2019-07-12 10:57:52

标签: kotlin

我不了解协程构造函数的语法。

private val uiScope = CoroutineScope(Dispatchers.Main + viewModelJob)

我知道参数需要协程上下文类。 我不明白的是如何添加两个不同的对象? Dispatchers.Main类是MainCoroutineDispatcher 并且viewModelJob类是Job。 有什么解释吗?

1 个答案:

答案 0 :(得分:2)

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

public fun CoroutineScope(context: CoroutineContext): CoroutineScope = ...

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

public operator fun plus(context: CoroutineContext): CoroutineContext = ...

plus运算符返回另一个CoroutineContextDispatchers.MainJob实现了接口CoroutineContext

也就是说,Dispatchers.Main + viewModelJob是对plus的调用,它构成了另一个CoroutineContext。在内部,这导致两个实例的集合。

相关问题