首页 > 解决方案 > Clojure 函数无法编译

问题描述

请原谅我完全缺乏知识,但是为什么这个函数不能编译?

(defn add-onehundred
  [num]
    (+ num 100))

  (add-onehundred 5)

我在终端中收到此错误:

Exception in thread "main" Syntax error compiling at (/private/var/folders/ls/j5fjkkb96mx340pb_gm12t740000gn/T/form-init13922061526950471210.clj:1:126).
        at clojure.lang.Compiler.load(Compiler.java:7647)
        at clojure.lang.Compiler.loadFile(Compiler.java:7573)
        at clojure.main$load_script.invokeStatic(main.clj:452)
        at clojure.main$init_opt.invokeStatic(main.clj:454)
        at clojure.main$init_opt.invoke(main.clj:454)
        at clojure.main$initialize.invokeStatic(main.clj:485)
        at clojure.main$null_opt.invokeStatic(main.clj:519)
        at clojure.main$null_opt.invoke(main.clj:516)
        at clojure.main$main.invokeStatic(main.clj:598)
        at clojure.main$main.doInvoke(main.clj:561)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.lang.Var.applyTo(Var.java:705)
        at clojure.main.main(main.java:37)
Caused by: java.lang.Exception: Cannot find anything to run for: clojure-noob.core
        at user$eval140.invokeStatic(form-init13922061526950471210.clj:1)
        at user$eval140.invoke(form-init13922061526950471210.clj:1)
        at clojure.lang.Compiler.eval(Compiler.java:7176)
        at clojure.lang.Compiler.eval(Compiler.java:7166)
        at clojure.lang.Compiler.load(Compiler.java:7635)
        ... 12 more

此处编辑器中的完整代码,当 main 被注释掉时,它不会编译,当它没有被注释掉时,add-onehundred什么也不返回:

(ns clojure-noob.core
  (:gen-class))

; (defn -main
;   "I don't do a whole lot ... yet."
;   [& args]
;   (println "Hello, Mate"))

(defn add-onehundred
  [num]
    (+ num 100))

(add-onehundred 5)

标签: clojure

解决方案


根据错误消息,您尝试使用以下命令运行它:

lein run

并且您的project.clj文件中有以下内容:

:main clojure-noob.core

或者:

:main ^:skip-aot clojure-noob.core

这告诉 Leiningen 在命名空间中寻找一个-main函数clojure-noob.core以便“运行”你的新应用程序——但是你已经将它注释掉了,所以 Leiningen 找不到它,因此“找不到要运行的东西:clojure-noob.core ”。

取消注释-main并让它调用add-onehundred并打印结果。请注意,Clojure 中的函数必须在使用之前定义(或至少声明),因此您的代码最终将如下所示:

(ns clojure-noob.core
  (:gen-class))

(defn add-onehundred
  [num]
  (+ num 100))

(defn -main
  "I don't do a whole lot ... yet."
  [& args]
  (println (add-onehundred 5)))

lein run应该运行您的应用程序并打印105


推荐阅读