Size: a a a

Kotlin Community

2020 May 07

Y

Yanis in Kotlin Community
я сразу ожидал что ConflatedBroadcastChannel.send и будет так работать, всетаки suspend функция но она по факту ни чем не отличается от offer
источник

K

Kotor in Kotlin Community
Привет
Как в котлине это правильно написать. С let и элвисом не получается
источник

K

Kotor in Kotlin Community
источник

AM

Andrew Mikhaylov in Kotlin Community
val id = data?.run { document_id ?: id }
if(id != null) {
   getDoc(id)
} else {
   setState(R.id.error)
}
источник

K

Kotor in Kotlin Community
Крассава Andrew. Спасибки
источник

AM

Andrew Mikhaylov in Kotlin Community
Заменил let на run, ошибка была.
источник

K

Kotor in Kotlin Community
Andrew Mikhaylov
Заменил let на run, ошибка была.
👍
источник

Y

Yanis in Kotlin Community
а если так?
    data?.also {
       getDoc(it)
   } ?: data2?.also {
       getDoc(it)
   } ?: run {
       setState()
   }
источник

AM

Andrew Mikhaylov in Kotlin Community
Yanis
а если так?
    data?.also {
       getDoc(it)
   } ?: data2?.also {
       getDoc(it)
   } ?: run {
       setState()
   }
Можно и так, я просто очень не люблю ?.let ?: run в качестве контрол флоу.
источник

Y

Yanis in Kotlin Community
свой channel вообще не написать? все закрыто internal
источник

AN

Alexander Nozik in Kotlin Community
Yanis
свой channel вообще не написать? все закрыто internal
А чем вариант с буфером в 1 не пошел?
источник

RE

Roman Elizarov in Kotlin Community
Нет. Там слишком сложный и хрупкий контракт у internal API, который невозможно адекватно документировать, плюс мы хотим его в будущем поменять.
источник

RE

Roman Elizarov in Kotlin Community
Но совсем не обязательно реализовывать интерфейс Channel. Можно просто написать свой канал так, как хочется.
источник

Y

Yanis in Kotlin Community
Alexander Nozik
А чем вариант с буфером в 1 не пошел?
не работает что-то, выше написали что вроде и не должно, я не разбирался
источник

Y

Yanis in Kotlin Community
только мне нужен Flow из Channel
наверное можно просто Flow интерфейс реализовать сразу
источник

BP

Bogdan Panchenko in Kotlin Community
Yanis
только мне нужен Flow из Channel
наверное можно просто Flow интерфейс реализовать сразу
Ваш канал может делать емит в flow
источник

Y

Yanis in Kotlin Community
Можно ли как-то внутри suspend функции запустить launch на текущем контексте?
такая конструкция не работает
val context = coroutineContext
coroutineScope {
  launch(context) {
      block()
  }
}
источник

VP

Vladimir Petrakovich in Kotlin Community
Yanis
Можно ли как-то внутри suspend функции запустить launch на текущем контексте?
такая конструкция не работает
val context = coroutineContext
coroutineScope {
  launch(context) {
      block()
  }
}
Вообще можно, но нельзя 🙂
При выходе из suspend-функции все запущенные внутри корутины должны быть завершены, поэтому вариантов примерно два:
1. запускать внутри свежесозданного скоупа, но придётся ждать завершения
2. явно передать в функцию скоуп, в котором запускать фоновые корутины
источник

Y

Yanis in Kotlin Community
печаль...
источник

ПГ

Павло Гриник... in Kotlin Community
Yanis
печаль...
А для чего вам так делать?
источник