2017-01-15 10 views
7

私はclojure.specを試してきました。私が使用している方法の1つは、指定しているマップのインスタンスを編集するためのUIを生成することです。たとえば、日付であると指定されたキーのdatepickerフィールドを持つWebフォームを生成する可能性があります。clojure.spec値によるメタプログラミング?

ライブラリにはget-specメソッドがありますが、必要に応じて値として仕様通りに動作する関数がないようです。マップ仕様を取ってそのマップの必要なキーをベクトルとして取得するようなことをする方法はありますか?この種のメタプログラミングは、clojure.specの意図されたユースケース外の仕様で行われていますか?

答えて

7

仕様によるメタプログラミングは、明らかにclojure.specの使用目的の範囲内です。

仕様書の仕様自体はまだリリースされていませんが、仕様書の仕様は作成されていません。これらを使用すると、仕様書そのものを準拠させ、(たとえば)マップ仕様から必要なキーを取得するために使用できる仕様を表すデータ構造を取り戻すことが可能です。あなたは、その構造のうち、キーのセットを摘み取ることができ

user=> (s/def ::name string?) 
:user/name 
user=> (s/def ::m (s/keys :req [::name])) 
:user/m 
user=> (s/conform ::spec (s/form ::m)) 
[:form {:s clojure.spec/keys, :args {:req [[:key :user/name]]}}] 

に準拠

::スペックの仕様は次のようになります。

+1

これは計画的な機能であると聞いてうれしいです。私はそれが非常に便利な方法をいくつか考えています。 –

関連する問題