Size: a a a

Kotlin Community

2019 November 07

VB

Viacheslav Blinov in Kotlin Community
Alexander Levin
Инлайновый enumset это не очень просто. Я делал похожую штуку, которая на основе енама создаёт для него инлайн класс с флаговыми константами и "сет" для них: https://github.com/Jellymath/FlagInline , но я не расширял ещё до мультиплатформы (да и доку надо сделать)
а наоборот можно?
источник

VM

Vadim Morozov in Kotlin Community
у меня чутка замешательство)
но не уверен что будет правильно)
у меня есть метод в котором конструкция when
и в else мне необходимо было написать простое условие
мол if (что то там) сделай что то
но студия ругается мол добавь к этому условию обязательно else
как бы да, я могу написать что то подобное
if (!model.ignoreTimeUpdate) viewContract?.updateTimeViews() else null

но в этом null'e как по мне мало проку
источник

AL

Alexander Levin in Kotlin Community
Viacheslav Blinov
а наоборот можно?
А что есть наоборот? :)

Если у вас набор флагов-констант, а вы хотите их не юзать, а вместо них взять енам, вам скорее рефакторинг в IDE нужен, чем штука, которая всё сгенерирует сбоку.

Но если неправильно понял задачу - уточните её, пожалуйста.
источник

QH

Quantum Harmonizer in Kotlin Community
Alexander Levin
Инлайновый enumset это не очень просто. Я делал похожую штуку, которая на основе енама создаёт для него инлайн класс с флаговыми константами и "сет" для них: https://github.com/Jellymath/FlagInline , но я не расширял ещё до мультиплатформы (да и доку надо сделать)
ой-ой
источник

VP

Vladimir Petrakovich in Kotlin Community
А инлайн классы не бывают с дженериками?
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
А инлайн классы не бывают с дженериками?
очень даже бывают
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
очень даже бывают
Тогда меня удивляет, что такая задача требует кодогенерацию 🤔
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
Тогда меня удивляет, что такая задача требует кодогенерацию 🤔
она и не требует
источник

AL

Alexander Levin in Kotlin Community
Vladimir Petrakovich
Тогда меня удивляет, что такая задача требует кодогенерацию 🤔
Надо вспоминать, я пробовал сначала просто инлайн класс с дженериками, но там всё-таки был боксинг. Но поскольку формулировка задачи была другая исходно (нужны были именно флаги), то может проблема решаемая.
источник

AL

Alexander Levin in Kotlin Community
@Harmonizr
Отбой, вроде работает, в решении с флагами сам сет не боксился, так что норм:

https://gist.github.com/Jellymath/93532594073463094c74647957f9028e (операции не все нужные, только то, что под рукой было)
источник

A

Alexander in Kotlin Community
столкнулись со странной ошибкой: компилятор ругается на inflix функцию (unresolved reference), у которой есть overloads
при это она присутствует в импортах и сама IDEA никаких ошибок не показывает
никто не сталкивался?
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Levin
@Harmonizr
Отбой, вроде работает, в решении с флагами сам сет не боксился, так что норм:

https://gist.github.com/Jellymath/93532594073463094c74647957f9028e (операции не все нужные, только то, что под рукой было)
Я щас то же самое писал)
источник

VP

Vladimir Petrakovich in Kotlin Community
источник

VP

Vladimir Petrakovich in Kotlin Community
Только на play.kotlinlang.org нельзя глянуть байткод 🙁
источник

QH

Quantum Harmonizer in Kotlin Community
Alexander Levin
@Harmonizr
Отбой, вроде работает, в решении с флагами сам сет не боксился, так что норм:

https://gist.github.com/Jellymath/93532594073463094c74647957f9028e (операции не все нужные, только то, что под рукой было)
лайк
источник

VM

Vadim Morozov in Kotlin Community
почему у меня в if требует обязательно else дописать?
 fun onTimerTick() {
       currentViewModel?.let { model ->
           when {
               model.shouldBeSetTimeOutMode -> {
                   stopPolling()
                   model.setNewViewMode(ViewMode.TIME_OUT)
                   viewContract?.updateTimeViews()
                   viewContract?.setContentViewMode(
                       viewMode,
                       ignoreTimeUpdate = viewMode.showProgress
                   )
               }
               model.shouldBeDestroyed -> {
                   viewContract?.closeView()
               }
               else -> {
                   if (!model.ignoreTimeUpdate) viewContract?.updateTimeViews()
               }
           }
       }
   }
источник

(

( in Kotlin Community
Vadim Morozov
почему у меня в if требует обязательно else дописать?
 fun onTimerTick() {
       currentViewModel?.let { model ->
           when {
               model.shouldBeSetTimeOutMode -> {
                   stopPolling()
                   model.setNewViewMode(ViewMode.TIME_OUT)
                   viewContract?.updateTimeViews()
                   viewContract?.setContentViewMode(
                       viewMode,
                       ignoreTimeUpdate = viewMode.showProgress
                   )
               }
               model.shouldBeDestroyed -> {
                   viewContract?.closeView()
               }
               else -> {
                   if (!model.ignoreTimeUpdate) viewContract?.updateTimeViews()
               }
           }
       }
   }
Потому что нужно вернуть результат?
источник

VM

Vadim Morozov in Kotlin Community
типа if mush have both main and else branches if used as an expression
источник

VM

Vadim Morozov in Kotlin Community
(
Потому что нужно вернуть результат?
а где вы видите что у меня возвращает результат?
такого вроде нет
источник

VM

Vadim Morozov in Kotlin Community
разе что let как то работает strange
источник