ClassNotFoundException:clojure.algo.monads

时间:2015-05-09 03:37:59

标签: clojure leiningen

我正在尝试使用clojure.algo.monads,我对clojure import / require / use有点困惑

; at lein...
:main monads.core/-main
:dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/algo.monads "0.1.5"]])

安装deps:lein deps

这个simpele代码来测试

(ns monads.core
  (require clojure.algo.monads))


(defn -main [& args]
  (clojure.algo.monads)
  (println "Hello, World!"))
莱恩跑了

Exception in thread "main" java.lang.ClassNotFoundException: clojure.algo.monads, compiling:(monads/core.clj:6:3)
at clojure.lang.Compiler.analyze(Compiler.java:6464)
at clojure.lang.Compiler.analyze(Compiler.java:6406)
at clojure.lang.Compiler$InvokeExpr.parse(Compiler.java:3665)
at clojure.lang.Compiler.analyzeSeq(Compiler.java:6646)
...

我做错了什么?

1 个答案:

答案 0 :(得分:3)

(clojure.algo.monads)函数中的-main表达式被视为对clojure.algo.monads的调用,它应该是特殊形式,宏或函数。但是,clojure.algo.monads是命名空间。没有与之对应的Java类文件。这会产生ClassNotFoundException

我建议你需要clojure.algo.monads命名空间,并且只引用你想要使用的有限函数或宏。这是一个例子。

user> (require '[clojure.algo.monads :refer [domonad maybe-m]])
nil

user> (defn f
        [x]
        (domonad maybe-m
                 [a x
                  b (inc x)]
                 (* a b)))
#'user/f

user> (f 3)
12

user> (f nil)
nil