Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在Clojure中使用声明的函数_Clojure_Ring - Fatal编程技术网

Can';t在Clojure中使用声明的函数

Can';t在Clojure中使用声明的函数,clojure,ring,Clojure,Ring,进展如何 可以找到我的代码 我一直试图通过以下方法学习Clojure,但我不太清楚为什么这段代码不起作用 代码如下: (ns calc-api.server.server (:require [ring.adapter.jetty :as jetty] [ring.middleware.params :as params] [ring.util.http-response :as response] [reitit.ri

进展如何

可以找到我的代码

我一直试图通过以下方法学习Clojure,但我不太清楚为什么这段代码不起作用

代码如下:

(ns calc-api.server.server
  (:require [ring.adapter.jetty :as jetty]
            [ring.middleware.params :as params]
            [ring.util.http-response :as response]
            [reitit.ring.middleware.muuntaja :as muuntaja]
            [muuntaja.core :as m]
            [reitit.ring.coercion :as coercion]
            [reitit.ring :as ring]))


(def hello-routes
  ["/hello" {:get {:handler (fn [_]
                              (response/ok {:mesage "Hello Reitit!"}))}}])



(def app
  (ring/ring-handler
   (ring/router
    [hello-routes]
    {:data {:muuntaja m/instance
            :middleware [params/wrap-params
                         muuntaja/format-middleware
                         coercion/coerce-exceptions-middleware
                         coercion/coerce-request-middleware
                         coercion/coerce-response-middleware]}})
   (ring/create-default-handler)))




(defonce running-server (atom nil))

(defn start
  []
  (when (nil? @running-server)
    (reset! running-server (jetty/run-jetty #'app {:port  3000
                                                   :join? false})))
  (println "Server running in port 3000"))

(defn stop
  []
  (when-not (nil? @running-server)
    (.stop @running-server)
    (reset! running-server nil))
  (println "Server stopped"))

当我运行REPL并切换到calc api命名空间并运行(start)函数时:

lein repl
(in-ns 'calc-api.server.server)
(start)
我希望服务器运行并打印“服务器正在端口x上运行”,但结果如下:

Syntax error compiling at (/tmp/form-init2855747266943058886.clj:1:1).
Unable to resolve symbol: start in this context
你知道为什么会这样吗?非常感谢您的帮助

编辑[1]

下面是发生的情况:

将我的代码和依赖项复制到模板的文件夹中,在中运行lein clean+lein run results

{:clojure.main/message
 "Syntax error compiling at (demo/core.clj:50:3).\nNo such namespace: log\n",
 :clojure.main/triage
 {:clojure.error/phase :compile-syntax-check,
  :clojure.error/line 50,
  :clojure.error/column 3,
  :clojure.error/source "core.clj",
  :clojure.error/path "demo/core.clj",
  :clojure.error/class java.lang.RuntimeException,
  :clojure.error/cause "No such namespace: log"},
 :clojure.main/trace
 {:via
  [{:type clojure.lang.Compiler$CompilerException,
    :message "Syntax error compiling at (demo/core.clj:50:3).",
    :data
    {:clojure.error/phase :compile-syntax-check,
     :clojure.error/line 50,
     :clojure.error/column 3,
     :clojure.error/source "demo/core.clj"},
    :at [clojure.lang.Compiler analyze "Compiler.java" 6812]}
   {:type java.lang.RuntimeException,
    :message "No such namespace: log",
    :at [clojure.lang.Util runtimeException "Util.java" 221]}],
  :trace
  [[clojure.lang.Util runtimeException "Util.java" 221]
   [clojure.lang.Compiler resolveIn "Compiler.java" 7388]
   [clojure.lang.Compiler resolve "Compiler.java" 7362]
   [clojure.lang.Compiler analyzeSymbol "Compiler.java" 7323]
   [clojure.lang.Compiler analyze "Compiler.java" 6772]
   [clojure.lang.Compiler analyze "Compiler.java" 6749]
   [clojure.lang.Compiler$InvokeExpr parse "Compiler.java" 3824]
   [clojure.lang.Compiler analyzeSeq "Compiler.java" 7113]
   [clojure.lang.Compiler analyze "Compiler.java" 6793]
   [clojure.lang.Compiler analyze "Compiler.java" 6749]
   [clojure.lang.Compiler$BodyExpr$Parser parse "Compiler.java" 6122]
   [clojure.lang.Compiler$FnMethod parse "Compiler.java" 5471]
   [clojure.lang.Compiler$FnExpr parse "Compiler.java" 4033]
   [clojure.lang.Compiler analyzeSeq "Compiler.java" 7109]
   [clojure.lang.Compiler analyze "Compiler.java" 6793]
   [clojure.lang.Compiler analyzeSeq "Compiler.java" 7099]
   [clojure.lang.Compiler analyze "Compiler.java" 6793]
   [clojure.lang.Compiler access$300 "Compiler.java" 38]
   [clojure.lang.Compiler$DefExpr$Parser parse "Compiler.java" 596]
   [clojure.lang.Compiler analyzeSeq "Compiler.java" 7111]
   [clojure.lang.Compiler analyze "Compiler.java" 6793]
   [clojure.lang.Compiler analyze "Compiler.java" 6749]
   [clojure.lang.Compiler eval "Compiler.java" 7185]
   [clojure.lang.Compiler load "Compiler.java" 7640]
   [clojure.lang.RT loadResourceScript "RT.java" 381]
   [clojure.lang.RT loadResourceScript "RT.java" 372]
   [clojure.lang.RT load "RT.java" 459]
   [clojure.lang.RT load "RT.java" 424]
   [clojure.core$load$fn__6856 invoke "core.clj" 6115]
   [clojure.core$load invokeStatic "core.clj" 6114]
   [clojure.core$load doInvoke "core.clj" 6098]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [clojure.core$load_one invokeStatic "core.clj" 5897]
   [clojure.core$load_one invoke "core.clj" 5892]
   [clojure.core$load_lib$fn__6796 invoke "core.clj" 5937]
   [clojure.core$load_lib invokeStatic "core.clj" 5936]
   [clojure.core$load_lib doInvoke "core.clj" 5917]
   [clojure.lang.RestFn applyTo "RestFn.java" 142]
   [clojure.core$apply invokeStatic "core.clj" 669]
   [clojure.core$load_libs invokeStatic "core.clj" 5974]
   [clojure.core$load_libs doInvoke "core.clj" 5958]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.core$apply invokeStatic "core.clj" 669]
   [clojure.core$require invokeStatic "core.clj" 5996]
   [clojure.core$require doInvoke "core.clj" 5996]
   [clojure.lang.RestFn invoke "RestFn.java" 408]
   [user$eval142$fn__146 invoke "form-init13165779102252361276.clj" 1]
   [user$eval142 invokeStatic "form-init13165779102252361276.clj" 1]
   [user$eval142 invoke "form-init13165779102252361276.clj" 1]
   [clojure.lang.Compiler eval "Compiler.java" 7181]
   [clojure.lang.Compiler eval "Compiler.java" 7171]
   [clojure.lang.Compiler load "Compiler.java" 7640]
   [clojure.lang.Compiler loadFile "Compiler.java" 7578]
   [clojure.main$load_script invokeStatic "main.clj" 475]
   [clojure.main$init_opt invokeStatic "main.clj" 477]
   [clojure.main$init_opt invoke "main.clj" 477]
   [clojure.main$initialize invokeStatic "main.clj" 508]
   [clojure.main$null_opt invokeStatic "main.clj" 542]
   [clojure.main$null_opt invoke "main.clj" 539]
   [clojure.main$main invokeStatic "main.clj" 664]
   [clojure.main$main doInvoke "main.clj" 616]
   [clojure.lang.RestFn applyTo "RestFn.java" 137]
   [clojure.lang.Var applyTo "Var.java" 705]
   [clojure.main main "main.java" 40]],
  :cause "No such namespace: log",
  :phase :compile-syntax-check}}
我不认为这和我的原始代码有任何关系

编辑[2]

我已经找到了一个我不喜欢的解决方案,但对我的学习有用。我将core.clj文件更改为需要服务器名称空间,并从那里调用start函数

(ns calc-api.core
  (:gen-class))
(require '[calc-api.server.server :as calc-api-server])
(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (calc-api-server/start))


这意味着每次我想停止服务器时都必须使用cmd+d,但至少它可以工作。感谢您提供的所有帮助。

仅使用repl信息和错误很难诊断您的问题。作为一种权宜之计,我建议从开始

按照自述文件的描述进行
git克隆
,然后
lein clean;lein test
验证安装和java等配置是否正确

此时,将代码复制到
src/clj/demo/core.clj
中,然后尝试
lein clean;lein run
。即使它不起作用,您也会得到更详细的错误消息,包括任何错误的可用行号


请用实验结果更新您的问题。代码在哪个文件中?请注意,NS中的连字符必须在文件名中加下划线,例如,
src/calc_api/server/server.clj
或类似文件有一个包含文档、资源、服务器(server.clj位于其中)、src/calc_api(core.clj位于其中)、目标、测试的主文件夹。因此,我的服务器文件夹/文件中没有未删除的分数或连字符。对于Leiningen项目,源文件(
*.clj
*.cljs
*.cljc
)是无效的。我看到项目中的源文件
server/server.clj
应该位于
src/calc_api/server/server.clj
。@SteffanWestcott将文件夹移到src/calc_api/server/server.clj,问题仍然存在。@Mauricosouza很好,但请更新Github repo中的代码,否则,我们将努力有效地帮助您。