clojure.spec의 버전이 1.9.0-alpha11
인 고위 함수를 작성하려고 시도했으나 반환 된 함수에 대해 유효성 검사를 수행하지 못했습니다.fdo에 대한 clojure.spec 유효성 확인
(defn adder [x] #(+ x %))
, 난 등의 사양을 작성 : 같이 고차 함수의 clojure.spec 가이드 섹션의 예를 사용
는, I는 adder
형태를 정의 나는 REPL에서 그것을 실행하면
(s/fdef adder
:args (s/cat :x number?)
:ret (s/fspec :args (s/cat :y number?)
:ret number?)
:fn #(= (-> % :args :x) ((:ret %) 0)))
는 예외가 대신 원하는 사양 검증 오류 발생합니다 :
user> (def add2 (adder 2))
#'user/add2
user> (add2 2)
4
user> (add2 "s")
ClassCastException java.lang.String cannot be cast to java.lang.Number clojure.lang.Numbers.add (Numbers.java:128)
user>
(stest/instrument `adder)
으로 spec'ing을 켜려고했습니다. 이 기능을 작동하는 동안 높은 순서 기능을 작동하지 않습니다.
동일한 동작을 재현 할 수 있습니다. 마지막으로 "위에서 설명한대로"를 정확히 나타내는 부분은 어디입니까? 이중 백틱은 오타 또는 의도입니까? –
@AntonHarald. 코드 블록을 업데이트했습니다. "위에서 설명한대로"는 게시물 상단의 굵게 표시된 ** 고차 함수 **를 나타냅니다. – frank