7

マップを取得する関数を定義しました。値にアクセスするために破壊を使用することを考えました。ただし、使用済みのキーがあるかどうかも確認したいと思います。

だから、例えばのようなもの...

 (defun func1 [{:keys [a b c] :rest rest}]
    (println a b c)
    (println rest))

 (func1 {:a 1 :b 2 :c 3 :d 4})

印刷します

 1 2 3
 4

これが必要な理由は、restがnullでない場合、これはおそらくエラーであり、通知したいからです。私は:asについて知っています。これを使用できます。しかし、有効なキーのリストを2回保存する必要があります。

私は何かが足りないのですか?

フィル

4

4 に答える 4

3

特定のマップに構造を強制することに関心があるSchema場合は、良い選択かもしれません ( の最初の例README) :

(ns schema-examples
  (:require [schema.core :as s
             :include-macros true ;; cljs only
             ]))

(def Data
  "A schema for a nested data type"
  {:a {:b s/Str
       :c s/Int}
   :d [{:e s/Keyword
        :f [s/Num]}]})

(s/validate
  Data
  {:a {:b "abc"
       :c 123}
   :d [{:e :bc
        :f [12.2 13 100]}
       {:e :bc
        :f [-1]}]})
;; Success!

(s/validate
  Data
  {:a {:b 123
       :c "ABC"}})
;; Exception -- Value does not match schema:
;;  {:a {:b (not (instance? java.lang.String 123)),
;;       :c (not (integer? "ABC"))},
;;   :d missing-required-key}
于 2015-10-30T16:40:22.273 に答える