我正在尝试使用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)
...
我做错了什么?
答案 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