ライニンゲン プロジェクト マップの実際の例を見てみましょう:global-vars
。
;; Sets the values of global vars within Clojure. This example
;; disables all pre- and post-conditions and emits warnings on
;; reflective calls. See the Clojure documentation for the list of
;; valid global variables to set (and their meaningful values).
:global-vars {*warn-on-reflection* true
*assert* false}
これにより、leiningen のユーザーは、プロジェクトのスコープに対して Clojures グローバル変数のデフォルト値を再定義できます。
ここで、このマップのキーがキーワードで構成されている場合clojure.spec/keys
、最初にマップの一部となるキーを指定してから、それらのキーの下で期待される値を個別に定義するために使用します。しかし、 and はandclojure.spec/keys
の非キーワードを暗黙のうちに無視し、 andの例外をスローするため(alpha15 の時点)、何らかの方法でこれを回避する必要があります。:req
:req-un
:opt
:opt-un
これらのグローバル変数のほとんどの型は、次の方法で取得できます。
(for [[sym varr] (ns-publics 'clojure.core)
:when (re-matches #"\*.+\*" (name sym))]
[varr (type @varr)])
=>
[*print-namespace-maps* java.lang.Boolean]
[*source-path* java.lang.String]
[*command-line-args* clojure.lang.ArraySeq]
[*read-eval* java.lang.Boolean]
[*verbose-defrecords* java.lang.Boolean]
[*print-level* nil]
[*suppress-read* nil]
[*print-length* nil]
[*file* java.lang.String]
[*use-context-classloader* java.lang.Boolean]
[*err* java.io.PrintWriter]
[*default-data-reader-fn* nil]
[*allow-unresolved-vars* java.lang.Boolean]
[*print-meta* java.lang.Boolean]
[*compile-files* java.lang.Boolean]
[*math-context* nil]
[*data-readers* clojure.lang.PersistentArrayMap]
[*clojure-version* clojure.lang.PersistentArrayMap]
[*unchecked-math* java.lang.Boolean]
[*out* java.io.PrintWriter]
[*warn-on-reflection* nil]
[*compile-path* java.lang.String]
[*in* clojure.lang.LineNumberingPushbackReader]
[*ns* clojure.lang.Namespace]
[*assert* java.lang.Boolean]
[*print-readably* java.lang.Boolean]
[*flush-on-newline* java.lang.Boolean]
[*agent* nil]
[*fn-loader* nil]
[*compiler-options* nil]
[*print-dup* java.lang.Boolean]
残りはドキュメントを読んで記入できます。'*assert*
しかし、私の質問は次のとおりです。マップにキーが含まれている場合、ブール値のみを保持することを確認する仕様をどのように記述すればよいでしょうか?