【发布时间】:2019-01-12 05:05:36
【问题描述】:
我对以下代码的情况感到困惑。 task.yield 是从 a 到 b 的 hashmap,store.put 是一个挂起函数,它接受 a 和 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)
}
}
编辑:我刚刚注意到列表 forEach 是一个内联函数,而我尝试使用的 map 不是。我猜这就是问题所在。
【问题讨论】:
标签: kotlin kotlinx.coroutines suspend