小编htu*_*y42的帖子

Kotlin foreach 在地图上与与协程一起使用时迭代键

我对以下代码发生的事情感到困惑。task.yield 是一个从 a 到 b 的哈希映射,而 store.put 是一个挂起函数,它接受一个 a 和一个 b。第一种遍历地图的方法没有问题,第二种方法也是如此。第三种方式对我来说是最自然的迭代方式,也是我最初编写的方式,导致 kotlin 抱怨挂起函数只能在协程主体内调用。我猜这与地图上的 forEaching 如何工作有关(可能与列表相反?)但我真的不明白问题是什么。

launch{
    // Kotlin is perfectly happy with this
    for(elt in task.yield.keys){
        store.put(elt,task.yield[elt]!!)
    }
    // and this
    task.yield.keys.forEach { 
        store.put(it,task.yield[it]!!)
    }
    // This makes kotlin sad. I'm not sure why
    task.yield.forEach { t, u ->
        store.put(t, u)
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚注意到 forEach 列表是一个内联函数,而我尝试使用的地图不是。我猜是这个问题。

suspend kotlin kotlinx.coroutines

5
推荐指数
1
解决办法
3410
查看次数

标签 统计

kotlin ×1

kotlinx.coroutines ×1

suspend ×1