在我的clojure代码中,我有一些通过调用自定义宏创建的函数。通常,宏将采用某种数据结构并从中创建方法。
这是一个人为的例子:
(create-function {:name "view-data" ...})
将创建一个名为view-data
的新函数。 (我的数据库查询是数据驱动的,因此我可以创建一个带有调用特定查询的指示名称的函数)
我的问题是,当我运行mvn clojure:swank
目标并从emacs连接到slime会话时,这些功能不可见。我必须访问该文件并使用C-c C-k
自行编译,以便创建函数。
maven输出表明文件本身编译正常,但是粘液会话不知道函数。
为什么会发生这种情况的任何想法?
答案 0 :(得分:1)
我的项目中有一个文件,require
所有名称空间都可以在repl中的每个可用位置创建所有函数。或许还有一种更为优雅的方式,但这种黑客对我来说非常可靠。
答案 1 :(得分:1)
请注意,在clojure中,编译和加载是单独的步骤。您可以生成您喜欢的所有类文件,但如果它们未加载,则不会影响正在运行的进程。
我对clojure不太了解:swven for maven,但听起来像leiningen,swank目标只会为你的项目设置类路径并加载swank代码而不是任何代码你的项目。因此,在此之后您仍将以某种方式加载代码(例如,从Emacs / SLIME,使用其他目标/插件或从REPL)。