이런 초등 질문은 죄송합니다. 바라건대 해답이 분명하지 않다는 사실은 주로 clojure.spec이 여전히 알파 버전 (0.1.134)으로 인한 것입니다.Clojure spec 오류 메시지 : filename? 줄 번호? 의미 : in?
이 사양 오류 메시지에서 문제 코드의 파일 이름과 줄 번호를 어떻게 찾을 수 있습니까? :in
키의 의미는 무엇입니까? 값 [2 1]
?
#error {
:cause Call to clojure.core/refer-clojure did not conform to spec:
In: [2 1] val: :as fails at: [:args :exclude :op :quoted-spec :spec] predicate: #{:exclude}
In: [2 1] val: :as fails at: [:args :only :op :quoted-spec :spec] predicate: #{:only}
In: [2 1] val: :as fails at: [:args :rename :op :quoted-spec :spec] predicate: #{:rename}
In: [2] val: (quote :as) fails at: [:args :exclude :op :spec] predicate: #{:exclude}
In: [2] val: (quote :as) fails at: [:args :only :op :spec] predicate: #{:only}
In: [2] val: (quote :as) fails at: [:args :rename :op :spec] predicate: #{:rename}
:data #:clojure.spec.alpha{:problems ({:path [:args :exclude :op :spec], :pred #{:exclude}, :val (quote :as), :via [], :in [2]} {:path [:args :exclude :op :quoted-spec :spec], :pred #{:exclude}, :val :as, :via [], :in [2 1]} {:path [:args :only :op :spec], :pred #{:only}, :val (quote :as), :via [], :in [2]} {:path [:args :only :op :quoted-spec :spec], :pred #{:only}, :val :as, :via [], :in [2 1]} {:path [:args :rename :op :spec], :pred #{:rename}, :val (quote :as), :via [], :in [2]} {:path [:args :rename :op :quoted-spec :spec], :pred #{:rename}, :val :as, :via [], :in [2 1]}), :speC#object[clojure.spec.alpha$regex_spec_impl$reify__1188 0x437e951d [email protected]], :value ((quote :exclude) (quote [reduce into merge map take partition partition-by]) (quote :as) (quote core)), :args ((quote :exclude) (quote [reduce into merge map take partition partition-by]) (quote :as) (quote core))}
...}
lein repl
을 입력하면이 오류가 발생합니다. 문제가되는 라인에 대한 내 생각 엔 여기에 있습니다
(ns fargish.util
(:refer-clojure :exclude [rand rand-int cond])
(:require [better-cond.core :refer [cond]]
[clojure.tools.trace :refer :all]
[clojure.pprint :refer [pprint]]
[clojure.math.numeric-tower :as math]
[clojure.core.async :as async :refer [<! <!! >! >!!]]
[clojure.java.io :as io]
[clojure.edn :as edn]
[popen :refer [popen] :as po]
[cheshire.core :as ch]
[lonocloud.synthread :as ->]))
내가 Clojure의 1.8에서 실행 된 디렉토리에서이 이상을 복사 할 때 오류 메시지가 처음 등장하기 때문에
. 이 코드는 Clojure 1.8에서 작동했다.내가 이 아니라면 불쾌한 파일과 라인을 추적하는 방법을 알고 싶습니다.에이 편리한 단서가 있습니다. 이 단서에도 불구하고, 나는 그것에 대해 무엇을해야할지 모르겠습니다. 오류가 내 코드, clojure.core/ns 코드 또는 clojure.core/ns의 사양에 있는지 확인할 수 없습니다. 또한 In: [2 1]
은 무엇을 언급합니까?
업데이트 나는 오류 (들)을 발견했다. 위의 내 생각은 틀렸다. 오류는 내 코드에도 없었습니다! 그것은 clojure.core.async에있었습니다. 나는 구 버전 0.2.374를 사용하고 있었다. 현재 버전 인 0.3.443으로 변경되었으며 오류 메시지가 종료되었습니다. Clojure 1.9 이전에 작성된 많은 코드는 :require
및 기타 키워드 이전에 콜론을 생략하는 것과 같이 ns
매크로의 일부 느슨 함을 악용하기 때문에 라이브러리가 업데이트되고 종속성이 업데이트 될 때까지 일반적인 문제가 될 것입니다 라이브러리. 유사한 오류가 popen (이미 수정되었습니다 - 빠른 서비스였습니다!)에있었습니다.
제 질문은이 오류의 세부 사항이 아닙니다. 일반적인 문제입니다. 예를 들어 시행 착오를 거쳐 긴 추격을 거치지 않고 문제가되는 코드 줄을 찾는 방법입니다.