Size: a a a

Kotlin Community

2019 November 06

VP

Vladimir Petrakovich in Kotlin Community
В JS object мог бы быть абсолютно прямолинейным:
let Object = { ... }
источник

BP

Bogdan Panchenko in Kotlin Community
Vladimir Petrakovich
В JS object мог бы быть абсолютно прямолинейным:
let Object = { ... }
+
источник

Kd

Konstantin dmz9 in Kotlin Community
итак, время тупых вопросов.
есть у меня предположим N флагов и все их вариации это K сетов, где K = 2^N;
нужна фабрика которая превращает сет флагов в какой нибудь потомок, например, sealed класса, чтобы с ним удобненько работать.
вопрос - как это можно удобно делать?
источник

QH

Quantum Harmonizer in Kotlin Community
Konstantin dmz9
итак, время тупых вопросов.
есть у меня предположим N флагов и все их вариации это K сетов, где K = 2^N;
нужна фабрика которая превращает сет флагов в какой нибудь потомок, например, sealed класса, чтобы с ним удобненько работать.
вопрос - как это можно удобно делать?
enum(set)
источник

Kd

Konstantin dmz9 in Kotlin Community
в енуме вроде нельзя свои данные дополнительно подпихнуть
источник

Kd

Konstantin dmz9 in Kotlin Community
ну типа, те которые могут изменяться, а такие есть
источник

VP

Vladimir Petrakovich in Kotlin Community
Konstantin dmz9
в енуме вроде нельзя свои данные дополнительно подпихнуть
А у вас что, на каждый флаг ещё и данные?
источник

Kd

Konstantin dmz9 in Kotlin Community
нет, флаги отдельно, данные отдельно
источник

QH

Quantum Harmonizer in Kotlin Community
Konstantin dmz9
ну типа, те которые могут изменяться, а такие есть
это как?
источник

Kd

Konstantin dmz9 in Kotlin Community
что то типа factory ( flags: Triple<Bool, Bool, Bool>, data: MyData ) : SomeClass {}
источник

Kd

Konstantin dmz9 in Kotlin Community
чтоб матчить по классу вместо if flag1, if flag2, if flag3, и т.п.
источник

QH

Quantum Harmonizer in Kotlin Community
я пока что не догадался, что тебе нужно
источник

Kd

Konstantin dmz9 in Kotlin Community
ну ок давай я напишу подругому
источник

Kd

Konstantin dmz9 in Kotlin Community
как мне избавиться от
factory ( flags: Triple<Bool, Bool, Bool>, data: MyData ) : SomeClass {
 val (a,b,c)=flags
 return when{
   a && b && c ->SomeClass1(data)
   a && b && !c ->SomeClass2(data)
   a && !b && c ->SomeClass3(data)
   a && !b && !c ->SomeClass4(data)
   !a && b && c ->SomeClass5(data)
   !a && b && !c ->SomeClass6(data)
   !a && !b && c ->SomeClass7(data)
   !a && !b && !c ->SomeClass8(data)
 }
}
источник

DB

Dmitry Baynak in Kotlin Community
Konstantin dmz9
как мне избавиться от
factory ( flags: Triple<Bool, Bool, Bool>, data: MyData ) : SomeClass {
 val (a,b,c)=flags
 return when{
   a && b && c ->SomeClass1(data)
   a && b && !c ->SomeClass2(data)
   a && !b && c ->SomeClass3(data)
   a && !b && !c ->SomeClass4(data)
   !a && b && c ->SomeClass5(data)
   !a && b && !c ->SomeClass6(data)
   !a && !b && c ->SomeClass7(data)
   !a && !b && !c ->SomeClass8(data)
 }
}
Map<BitSet, (MyData) -> SomeClass>?
источник

DB

Dmitry Baynak in Kotlin Community
Ну, или не BitSet, а прямо Triple<Bool, Bool, Bool>
источник

QH

Quantum Harmonizer in Kotlin Community
Konstantin dmz9
как мне избавиться от
factory ( flags: Triple<Bool, Bool, Bool>, data: MyData ) : SomeClass {
 val (a,b,c)=flags
 return when{
   a && b && c ->SomeClass1(data)
   a && b && !c ->SomeClass2(data)
   a && !b && c ->SomeClass3(data)
   a && !b && !c ->SomeClass4(data)
   !a && b && c ->SomeClass5(data)
   !a && b && !c ->SomeClass6(data)
   !a && !b && c ->SomeClass7(data)
   !a && !b && !c ->SomeClass8(data)
 }
}
тебе, наверное, нужен PartialStruct из Lychee
источник

QH

Quantum Harmonizer in Kotlin Community
источник

QH

Quantum Harmonizer in Kotlin Community
и там хоть getOrThrow, хоть getOrElse или getOrDefault
источник

Kd

Konstantin dmz9 in Kotlin Community
Dmitry Baynak
Map<BitSet, (MyData) -> SomeClass>?
вроде подходит, спасибо
источник