我正在寻找一种方法将我的助手功能保持在文件的底部,而不是将它们全部声明在顶部.
一个解决方案应该是编写一个"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*))))))
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
(declare-helpers)
(defn hello-user [name] (greet name))
(dehfn greet [name] (str "Hello my dear " name))
Run Code Online (Sandbox Code Playgroud)
这是不可能的.没有宏可以知道稍后在文件中写入的代码而不是宏调用,因为它还没有要检查的变量.只是练习阅读文件"颠倒":Clojure并不是唯一一种公共和/或重要内容通常位于底层的语言.
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |