Про любой юнион который сделан по скала-обычаям: case class TheCase extends SealedTrait
enum Event: case Create(...) case Change(...) case Delete(...)
Scala 3
То есть подтверждаете, что скала?
да, можете закодировать свою структуру в scala 3, чтобы не было слова extends и использовать это в scala 2 коде
Вообще не спорил. Более того, то что этот бред пофиксил в 3 говорит о том, что это было полное говно в 2. Но не все знают, что это ьак
Ну не надо так, мейнстрим языков с нормальными типами-пересечениями не так много. Отсутствие union types в скале мешало, но куча других языков как-то живет без этой фичи. Начиная с джавы.
Ну я же говорю, выживать можно как угодно. Размахивать АДТ по всем Интернета и не иметь нормального определения суммы - такое себе.
расскажите, как выглядит нормальное определение суммы
Так у вас претензии не к языку, и даже не к цирке, а к агрессивному фанатичному коммьюнити? Ну что поделаешь, другого коммюнити нет. Самое приличное обитает на реддите, кстати.
Вот так, например: type Shape = | Rectangle of width : float * length : float | Circle of radius : float | Prism of width : float * float * height : float
Этот SML код в точности соответствует определению через enum
кринжанул
А в скале 2 что там про енам? А в скале 3 что там про цирку? Ответы: ни того, ни другого. Енамов нет в 2. Цирка есть - писать кодеки руками в 3.
Таки это полностью эквивалентно наследованию.
знает
в скале case class ... extends и есть энкодинг этого энама, он вводит несколько новых типов, которые вы вправе не использовать
Нет. Потому что НЕ надо менять определение Rectangle чтобы он поучаствовал в каком-либо юнионе. Rectangle знать не знает в каких он юнионах.
Rectangle уже определен как часть этого юниона. Он не может быть определен в другом модуле. Вот если бы он мог быть определен до определения юниона и после этого включен в юнион в другом модуле или включен в 2 разных юниона - это было бы что-то отличное от sealed trait
Так в scala 3 тоже есть extends https://docs.scala-lang.org/scala3/book/types-adts-gadts.html , просто он опускается. А вы согласились, что в scala3 круто. Видимо проблема в наличии "extends", а не в том, как это реализовано
Тма просто либ для JSON по факту нет - руками кодеки я могу писать сколько угодно. В 2021 для меня это немного странно и должно быть отдельно везде заявлено.
Владимир, вы пример с ЖСОН то обещали на фарше
ну юнионы без наследования.я привел?
Не можешь. Час назад молил о примере
Перестань себя закапывать
да они и в скале без наследования, никому не интересен этот бред про "без наследования", интересно, как вы автоматически распакуете вложенные рекорды с дискриминатором в популярной либе в другом зяыке
Они не без наследования. Они с другим синтаксисом наследования
Нет, там нет насдедования - можете в IL заглянуть
вы пришли с конкретной задачей, вам привели несколько предложений
Да какая разница? Количество объявляемых сущностей такое же. Ограничения на них такие же.
и я это ценю но потом вы начали говорить как это прекрасно когда юнион заставляет менять определение классов которые в нем участвуют
код на эфшарпе напишите с ЖСОНом потом поговорите
хорошо, то есть просто показать, что мои юнионы номально ложатся в JSON - правильно?
> юнион заставляет менять определение классов которые в нем участвуют вы кажется не различаете юнион и адт
Что они ложаться в JSON как-то принципиально лучше, чем код на кирке с Iso
Стикер
Нет такого "лучше" Есть два нормальных способа представлять юнионы: wrapped object и discriminator field
В моем коде тоже юнион не менял изначальные классы
Обсуждают сегодня