2017-01-15 4 views
7

Ich habe clojure.spec ausprobiert, und eine Idee, die ich habe, um sie zu verwenden, besteht darin, die Benutzeroberfläche zum Bearbeiten einer Instanz der von mir angegebenen Map zu generieren. Beispielsweise könnte es ein Webformular mit einem Datumsauswahlfeld für einen Schlüssel generieren, der als ein Datum, diese Art der Sache angegeben wird.Metaprogrammierung mit clojure.spec Werten?

Es gibt eine get-spec Methode in der Bibliothek, aber es scheint, als ob es keine Funktionen gibt, die auf Spezifikationen arbeiten-als-Werte in der Art, die ich brauche. Gibt es eine Möglichkeit, Dinge wie eine Kartenspezifikation zu machen und die benötigten Schlüssel für diese Karte als Vektor zurückzubekommen? Ist diese Art der Metaprogrammierung mit Spezifikationen außerhalb des beabsichtigten Verwendungsfalls von clojure.spec?

Antwort

7

Metaprogrammierung mit Spezifikationen ist definitiv im vorgesehenen Anwendungsfall von clojure.spec.

Wir haben noch nicht veröffentlicht (aber haben geschrieben und beabsichtigen) Spezifikationen für Spezifikationen selbst. Mit diesen ist es möglich, ein Spezifikationsformular selbst anzupassen und eine Datenstruktur zurückzubekommen, die die Spezifikation darstellt, die verwendet werden kann, um (zum Beispiel) die erforderlichen Schlüssel aus einer Kartenspezifikation zu entnehmen.

mit :: spec spec Konforme könnte wie folgt aussehen:

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]]}}] 

Sie könnten dann den Satz Schlüssel zupfen aus dieser Struktur.

+1

Großartig, ich bin froh zu hören, dass dies ein geplantes Feature ist - ich kann mir eine Reihe von Möglichkeiten vorstellen, in denen es ziemlich nützlich wäre! –

Verwandte Themen