Clojure:namespace和-main

我正在尝试理解-main及其命名空间设置. -main函数中的默认命名空间似乎是“user”,但可以调用在同一文件中的main函数“上方”定义的函数.他们被提到了吗?我这样做是为了找出:

(ns ack.doodle)

(defn fo [] "bar")

(defn -main [& args]
  (println (fo))                               ;; bar
  (println *ns*)                               ;; #<Namespace user>
  (println (get (ns-refers *ns*) 'sorted-map)) ;; #'clojure.core/sorted-map
  (println (get (ns-refers *ns*) 'fo))         ;; nil
  (println (get (ns-map *ns*) 'fo))            ;; nil
  (println (get (ns-publics *ns*) 'fo))        ;; nil
  (println (get (ns-interns *ns*) 'fo))        ;; nil
  (println (get (ns-aliases *ns*) 'fo))        ;; nil
  (println (ns-resolve *ns* 'fo)))             ;; nil

调用(fo)成功,但显然符号’fo在当前名称空间* ns *中是未知的.这是怎么回事?

当尝试将某个函数的名称和一些参数作为命令行参数传递给-main时,这个问题就出现了.

重现步骤

>将上面的代码粘贴到文件./src/ack/doodle.clj中
>使用以下内容创建./project.clj:

(defproject ack “1” :main ack.doodle)

>运行它:

lein run

最佳答案 我没有为你回答
last night in #clojure吗?如果对答案有些不满意,你必须澄清你的问题.

点赞