使用clojure自动声明帮助函数

szy*_*ski 0 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*))))))
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)

ama*_*loy 6

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

  • 然后你有两个问题......你*可以*将你的整个文件内容包装在一个宏中并走源,但不要.你*可以*每次编辑文件时使用emacs进行操作,但不是. (2认同)