【发布时间】:2014-01-08 15:58:09
【问题描述】:
我正在寻找一种方法来将我的辅助函数保留在文件的底部,而不是将它们全部声明在顶部。
一种解决方案应该是编写一个“declare-helpers”函数,该函数获取当前文件中通过 defn- 宏创建的所有函数的名称,并将它们包装在一个声明调用中。
我在这里询问获取这些名称的更好方法。
* 编辑 *
我知道这是不好的做法,但是下面的代码似乎可以满足我的要求
请注意,它仅适用于使用“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))
【问题讨论】:
-
你为什么要这样做?在顶部编写函数在底部使用是可读性的直接胜利。毕竟,人们仍然从上到下阅读代码。仅仅因为函数不是 API 公开或不是 ns 的公共函数,它们的重要性并不低,甚至可能更重要,因为它们是读者打开源文件时感兴趣的重要部分。
标签: clojure