Могут ли типы объединения Scala 3 «исправить» проблему Map[String, Any]?

Идиоматический код Scala максимально безопасен. В результате к размышлению относятся неодобрительно, и если в итоге вы получите Any в ваших статических типах у вас проблема.

Например, популярная библиотека Circe может без какого-либо шаблона превратить Map[String, String] или Map[String, Int] в JSON

      Map("a" -> "b").asJson
Map("one" -> 1).asJson

но если вы попытаетесь объединить два, вы получите Map[String, Any] и он не может с этим работать.

      Map("a" -> "b", "one" -> 1).asJson // BOOM (compile-time boom, of course, we are not animals)

В Scala 3 предположительно тип будет Map[String, String | Int] ?

Если да, то теперь возможно реализовать такие методы, как asJson (возможно, используя макросы, если необходимо), которые могут определить, что каждый из возможных типов в объединении является «приемлемым»?

(Пример Цирцеи был просто примером того, что в реальной жизни у вас вообще не будет этой карты, а будет правильный case-класс, для обсуждения этого аспекта см. Ветку, которая вызвала этот вопрос)

0 ответов

Другие вопросы по тегам