创建DSL:如何在当前上下文中加载clojure文件

时间:2015-06-04 15:43:04

标签: clojure dsl

我正在尝试使用clojure创建用于打包软件的DSL。我想定义宏,函数等,然后加载一个文件,我希望我定义的所有东西都与文件本身在同一名称空间中,这样如果我定义一个宏abe,我可以在不使用abe的完全限定名称的情况下在文件中使用它。

到目前为止,我有这个:

(binding [*ns* (find-ns 'my-namespace)]
    (load-file "Myfile"))

但我觉得我做错了。

此外,甚至可以在clojure文件中访问本地绑定变量。像这样:

(let [a 1]
    (binding [*ns* (find-ns 'my-namespace)]
        (load-file "myfile")))

a中可以使用myfile

这个想法是允许程序员指定如何在真正的clojure中打包,但是语言以对程序员透明的方式扩展。

有更好的方法吗?是否有更好的“惯用”方式在clojure中创建DSL?

0 个答案:

没有答案