无法从compojure中使用defroutes宏

时间:2016-03-25 16:04:32

标签: clojure macros compojure

运行此代码时:


    (:use 'compojure.core)
    (keys (ns-publics 'compojure.core))


    (defroutes app-routes
      (GET "/" [] "Hello World")
      (route/resources "/")
      (route/not-found "Not Found"))

我收到了这条消息:

CompilerException java.lang.RuntimeException: Unable to resolve symbol: defroutes in this context, compiling:(restful_clojure\routes.clj:5:1) 

但是当我跑步时:


    (keys (ns-publics 'compojure.core))

它表明定义了宏:


    (defroutes PUT POST routing routes make-route let-routes DELETE ANY let-request GET HEAD PATCH context OPTIONS)

1 个答案:

答案 0 :(得分:0)

Clojure有方法requireimportreferuse。这些用于处理不同的命名空间。

:use是一个Keyword,它的行为类似于一个函数(在您的示例中,它应该返回nil),但不会执行您想要的操作。

混淆可能源于ns macro 内的这一事实,您可以使用相应的关键字'嵌入'这些函数的行为。

有关命名空间的更多信息,请参阅此link