使用clojure自动声明帮助函数

时间:2014-01-07 13:48:11

标签: clojure

我正在寻找一种方法来将我的帮助函数保存到文件的底部,而不是将它们全部声明在顶部。

一个解决方案应该是编写一个“declare-helpers”函数,该函数获取当前文件中通过defn-macro创建的所有函数的名称,并将它们包装在声明调用中。

这里我要问的是获取这些名字的更好方法。

*编辑*

我知道这是不好的做法但是,以下代码似乎做了我想做的事情

请注意,它仅适用于使用“dehfn”宏

定义的辅助函数
;define helper function
(defmacro dehfn [name & body]
  `(defn- ~name ~@body))

(defmacro declare-helpers []
  `(declare ~@(map symbol 
                   (re-seq #"(?<=dehfn\s)[a-zA-Z+!\-_?0-9*~#@''`/.$=]*(?=\s)" 
                           (slurp (str "src/" *file*))))))

现在你可以这样做:

(declare-helpers)

(defn hello-user [name] (greet name))

(dehfn greet [name] (str "Hello my dear " name))

1 个答案:

答案 0 :(得分:6)

这是不可能的。没有宏可以知道稍后在文件中写入的代码而不是宏调用,因为它还没有要检查的变量。只是练习阅读文件“倒置”:Clojure并不是公共和/或重要内容常常位于底层的唯一语言。