2017-01-15 13 views
7

Próbowałem clojure.spec, a jedną z pomysłów, jak to zrobić, jest wygenerowanie interfejsu użytkownika do edycji instancji podanej przeze mnie mapy. Na przykład może wygenerować formularz internetowy z polem datepicker dla klucza, który jest określony jako data, tego typu rzeczy.Metaprogramming z wartościami clojure.spec?

W bibliotece istnieje metoda get-spec, ale wygląda na to, że nie ma żadnych funkcji, które działają zgodnie ze specyfikacjami-wartościami w taki sposób, jaki jest mi potrzebny. Czy jest jakiś sposób zrobienia rzeczy takich jak pobranie spec mapy i odzyskanie wymaganych kluczy dla tej mapy jako wektora? Czy tego rodzaju metaprogramowanie ma specyfikacje wykraczające poza zamierzony przypadek użycia clojure.spec?

Odpowiedz

7

Metaprogramming ze specyfikacją zdecydowanie mieści się w zamierzonym zastosowaniu clojure.spec.

Nie wydaliśmy jeszcze (ale napisaliśmy i zamierzamy) specyfikacji dla samych specyfikacji. Dzięki temu możliwe jest dostosowanie samego formularza spec i odzyskanie struktury danych reprezentującej specyfikację, która może być użyta do (na przykład) pobrania wymaganych kluczy ze specyfikacji mapy.

Zgodne ze specyfikacją :: specyfikacji może wyglądać mniej więcej tak:

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

Następnie można zrywać zestaw kluczy z tej struktury.

+1

Wspaniale, cieszę się, że jest to planowana funkcja - mogę wymyślić kilka sposobów, w jakie byłaby ona przydatna! –

Powiązane problemy