我正在寻找一种方法来将我的帮助函数保存到文件的底部,而不是将它们全部声明在顶部。
一个解决方案应该是编写一个“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))
答案 0 :(得分:6)
这是不可能的。没有宏可以知道稍后在文件中写入的代码而不是宏调用,因为它还没有要检查的变量。只是练习阅读文件“倒置”:Clojure并不是公共和/或重要内容常常位于底层的唯一语言。