我是Clojure的新手,我玩得很开心.我遇到一些麻烦的一件事是如何阅读错误,我个人认为它们不是很具描述性,但这可能是由于我的“新手”. 例如,我现在遇到的问题是当我尝试启动我的环
例如,我现在遇到的问题是当我尝试启动我的环服务器时(如果需要,我可以提供更多详细信息):
Started server on port 3000 java.lang.IllegalArgumentException: No implementation of method: :make-reader of protocol: #'clojure.java.io/IOFactory found for class: nil core_deftype.clj:544 clojure.core/-cache-protocol-fn io.clj:69 clojure.java.io/fn[fn] io.clj:102 clojure.java.io/reader RestFn.java:410 clojure.lang.RestFn.invoke validator.clj:161 selmer.validator/validate-tags validator.clj:175 selmer.validator/validate template_parser.clj:155 selmer.template-parser/read-template template_parser.clj:206 selmer.template-parser/preprocess-template RestFn.java:410 clojure.lang.RestFn.invoke parser.clj:211 selmer.parser/parse-file parser.clj:234 selmer.parser/parse RestFn.java:442 clojure.lang.RestFn.invoke parser.clj:99 selmer.parser/render-file RestFn.java:425 clojure.lang.RestFn.invoke layout.clj:17 picture-gallery.views.layout/picture-gallery.views.layout.RenderablePage core.clj:94 compojure.core/make-route[fn] core.clj:40 compojure.core/if-route[fn] core.clj:25 compojure.core/if-method[fn] core.clj:107 compojure.core/routing[fn] core.clj:2515 clojure.core/some core.clj:107 compojure.core/routing RestFn.java:139 clojure.lang.RestFn.applyTo core.clj:626 clojure.core/apply core.clj:112 compojure.core/routes[fn] core.clj:107 compojure.core/routing[fn] core.clj:2515 clojure.core/some core.clj:107 compojure.core/routing RestFn.java:139 clojure.lang.RestFn.applyTo core.clj:626 clojure.core/apply core.clj:112 compojure.core/routes[fn] middleware.clj:44 noir.util.middleware/wrap-request-map[fn] keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn] nested_params.clj:70 ring.middleware.nested-params/wrap-nested-params[fn] params.clj:58 ring.middleware.params/wrap-params[fn] middleware.clj:12 hiccup.middleware/wrap-base-url[fn] multipart_params.clj:107 ring.middleware.multipart-params/wrap-multipart-params[fn] middleware.clj:139 noir.util.middleware/wrap-access-rules[fn] validation.clj:135 noir.validation/wrap-noir-validation[fn] cookies.clj:66 noir.cookies/noir-cookies[fn] cookies.clj:171 ring.middleware.cookies/wrap-cookies[fn] session.clj:141 noir.session/noir-flash[fn] flash.clj:31 ring.middleware.flash/wrap-flash[fn] session.clj:96 noir.session/noir-session[fn] session.clj:85 ring.middleware.session/wrap-session[fn] Var.java:379 clojure.lang.Var.invoke reload.clj:18 ring.middleware.reload/wrap-reload[fn] stacktrace.clj:17 ring.middleware.stacktrace/wrap-stacktrace-log[fn] stacktrace.clj:80 ring.middleware.stacktrace/wrap-stacktrace-web[fn] jetty.clj:18 ring.adapter.jetty/proxy-handler[fn] (Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$ff19274a.handle HandlerWrapper.java:116 org.eclipse.jetty.server.handler.HandlerWrapper.handle Server.java:363 org.eclipse.jetty.server.Server.handle AbstractHttpConnection.java:483 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest AbstractHttpConnection.java:920 org.eclipse.jetty.server.AbstractHttpConnection.headerComplete AbstractHttpConnection.java:982 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete HttpParser.java:635 org.eclipse.jetty.http.HttpParser.parseNext HttpParser.java:235 org.eclipse.jetty.http.HttpParser.parseAvailable AsyncHttpConnection.java:82 org.eclipse.jetty.server.AsyncHttpConnection.handle SelectChannelEndPoint.java:628 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle SelectChannelEndPoint.java:52 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run QueuedThreadPool.java:608 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob QueuedThreadPool.java:543 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run Thread.java:722 java.lang.Thread.run
这对我来说是如此模糊,我怎么知道我做错了什么?我不记得处理任何“make-reader”,协议或IOFactory.
如果没有太多背景,这是一个棘手的问题.然而,你似乎对 http://dev.clojure.org/jira/browse/CLJ-1210犯规,这指出这个错误信息明显无益!请你看看Clojure Clostache error – No implementation of method: :make-reader of protocol: #’clojure.java.io/IOFactory found for class: nil,这可能是重复的.它的长短是你所指的某些资源不存在.结果它被检索为“nil”,然后导致你看到的麻烦.也许一个库可能会抛出资源未找到的异常(或者至少有抛出异常的异常).
我在其中挖掘的方法之一是查看selmer源代码,因为这是堆栈跟踪的第一个非clojure.core部分.这样做的第一件事就是……
(defn validate-tags [template] (with-open [rdr (reader template)]
从这里一些推论和一点点谷歌搜索让我到上面.
[2017更新:无用的错误最终在Clojure 1.8中修复,所以希望人们不会再看到这个问题!]