2017-01-15 4 views
7

저는 clojure.spec을 사용해 왔습니다. 사용 방법에 대한 하나의 아이디어는 내가 지정한지도 인스턴스를 편집하기위한 UI를 생성하는 것입니다. 예를 들어, 날짜가되도록 지정된 키에 대한 datepicker 필드가있는 웹 양식을 생성 할 수 있습니다.clojure.spec 값으로 메타 프로그래밍 하시겠습니까?

라이브러리에는 get-spec 메서드가 있지만, 필요한 방식으로 값을 사양으로 처리하는 함수가없는 것처럼 보입니다. 맵 스펙을 취하고 해당 맵의 필수 키를 벡터로 가져 오는 것과 같은 일을 할 수있는 방법이 있습니까? 이러한 종류의 메타 프로그래밍은 clojure.spec의 의도 된 사용 사례 외부의 사양과 관련이 있습니까?

답변

7

스펙을 사용한 메타 프로그래밍은 분명히 clojure.spec의 사용 용도 내에 있습니다.

사양서 자체에 대한 사양을 아직 발표하지 않았지만 작성했습니다. 이것들과 함께, 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

멋진데, 이것이 기획 된 기능이라고 들었 기 때문에 기쁩니다. 매우 유용 할 수있는 여러 가지 방법을 생각할 수 있습니다! –