【问题标题】:Clojure spec coerce nested map valueClojure 规范强制嵌套映射值
【发布时间】:2016-11-20 11:32:27
【问题描述】:

我像这样强制映射值:

(require '[clojure.spec :as s])

(defn x-integer? [x]
  (cond
    (integer? x) x
    (string? x) (try
                  (Integer/parseInt x)
                  (catch Exception e
                    :clojure.spec/invalid))
    :else :clojure.spec/invalid))

(s/def ::port (s/conformer x-integer?))

(s/def ::config (s/keys :req [::port]))

(s/conform ::config {::port "12345"}) ;;=> #:my.ns{:port "12345"}

但是,我不知道如何使用以下地图来做同样的事情:

(s/conform ::config {::nested-data {:port "12345"}}) ;;=> something like that maybe ? #:my.ns/nested-data{:port 12345}

::config 应该如何定义?另外,最好用{::nested-data {::port "12345"}} 代替吗?

【问题讨论】:

  • 您似乎缺少使用 x 整数的 ::port 规范?这个例子似乎不完整。
  • @AlexMiller 你是对的,问题已编辑。

标签: clojure clojure.spec


【解决方案1】:
(s/def ::port (s/conformer x-integer?))
(s/def ::nested-data (s/keys :req-un [::port]))
(s/def ::config (s/keys :req [::nested-data]))
(s/conform ::config {::nested-data {:port "12345"}})
;;=> #:spec.examples.guide{:nested-data {:port 12345}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 1970-01-01
    相关资源
    最近更新 更多