【发布时间】:2012-04-22 10:59:30
【问题描述】:
我正在尝试了解 -main 及其命名空间设置。 -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)
-
运行它:
跑起来
【问题讨论】:
标签: clojure namespaces scope main leiningen