Я не совсем понимаю, что происходит со следующим кодом. task.yield является хэш-картой от a до b, а 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)
}
}
Edit: я только что заметил, что список forEach является встроенной функцией, а карта, которую я пытаюсь использовать, - нет. Я предполагаю, что это проблема.