Я использую Clojure для реализации (письменного) документа стандартов. В общем, я доволен тем, как Clojure позволяет мне писать код, который соответствует различным частям стандарта. С прицелом на будущее я экспериментирую с написанием для него clojure.spec
. В документе они определяют различные структурированные элементы данных с именованными полями. Однако поля в разных структурах имеют одно и то же имя, например, «красная» структура имеет поле «значение», которое является строкой, но «синяя» структура имеет поле «значение», которое является целым числом. Как я могу справиться с этим, когда речь заходит о написании спецификаций?спецификации clojure для карт и их значения
(s/def ::value ???)
(s/def ::red (s/keys :req [::value ...]))
(s/def ::blue (s/keys :req [::value ...]))
official advice, как я понимаю, в том, что названные ключи должны иметь ту же семантику везде.
Как мне подойти к этому? Я мог бы назвать их «red-value» и «blue-value», но это делает соответствие между кодом и стандартом менее ясным. Могу ли я поместить каждую структуру в собственное пространство имен?
Спасибо. Просто, чтобы проверить мое понимание - красный в ':: red' полностью не зависит от того, что находится в': red/value', не так ли? Также существует какой-либо способ использования именных карт здесь, например. '# :: red {: значение" hi "...}' –
Re red - yes. Синтаксис карты пространства имен является просто синтаксисом, поэтому '# :: red {: value" hi "}' и '{:: red/value" hi "}' - это точно такие же данные. Под этим я имею в виду, вы можете использовать либо, не имеет значения, и это полностью ортогонально от того, соответствуют ли данные спецификации. –