所以,在我core.clj文件我有:交換!原子,然後:java.lang.ClassCastException:java.lang.String中不能轉換到clojure.lang.IFn
(def page-buffer (BufferedReader. (InputStreamReader. (clojure.java.io/input-stream (clojure.java.io/resource "mitochondria.html")))))
(def parsed-page (atom ""))
再後來:
(defn -main [& args]
(let [port (Integer/parseInt (first args))]
(swap! parsed-page (with-open []
(.toString (reduce #(.append %1 %2)
(StringBuffer.) (line-seq page-buffer)))))
(println "Server is starting")
(println "port: " port)
(run-server port)))
這個編譯,然後我把它變成uberjar。但是當我運行它時,我得到了交換行!炸燬:
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to clojure.lang.IFn
at clojure.core$swap_BANG_.invoke(core.clj:2106)
at serve_pages_from_memory.core$_main.doInvoke(core.clj:29)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at serve_pages_from_memory.core.main(Unknown Source)
我想這不使用原子和一切工作只是罰款(使用「高清」定義的變種是一個字符串),但最終我想這個變種發送給多個線程,所以我需要這是一個原子或代理。
我做錯了什麼?
更新:
傑勒米海勒,謝謝。固定,但結果是醜陋的罪:
(defn parse-buffer [& everything-else]
(with-open []
(.toString (reduce #(.append %1 %2)
(StringBuffer.) (line-seq page-buffer)))))
(defn -main [& args]
(let [port (Integer/parseInt (first args))]
(swap! parsed-page parse-buffer)
(println "Server is starting")
(println "port: " port)
(run-server port)))
我必須給parse-buffer或我得到一個錯誤的參數。但我不使用這個論點,所以這很難看。我必須寫這個錯誤,是的?