为什么我没有在新的粘液会话中看到我的宏创建函数? (Clojure的)

时间:2011-03-18 07:35:36

标签: macros clojure slime swank

在我的clojure代码中,我有一些通过调用自定义宏创建的函数。通常,宏将采用某种数据结构并从中创建方法。

这是一个人为的例子:

(create-function {:name "view-data" ...})

将创建一个名为view-data的新函数。 (我的数据库查询是数据驱动的,因此我可以创建一个带有调用特定查询的指示名称的函数)

我的问题是,当我运行mvn clojure:swank目标并从emacs连接到slime会话时,这些功能不可见。我必须访问该文件并使用C-c C-k自行编译,以便创建函数。

maven输出表明文件本身编译正常,但是粘液会话不知道函数。

为什么会发生这种情况的任何想法?

2 个答案:

答案 0 :(得分:1)

我的项目中有一个文件,require所有名称空间都可以在repl中的每个可用位置创建所有函数。或许还有一种更为优雅的方式,但这种黑客对我来说非常可靠。

答案 1 :(得分:1)

请注意,在clojure中,编译和加载是单独的步骤。您可以生成您喜欢的所有类文件,但如果它们未加载,则不会影响正在运行的进程。

我对clojure不太了解:swven for maven,但听起来像leiningen,swank目标只会为你的项目设置类路径并加载swank代码而不是任何代码你的项目。因此,在此之后您仍将以某种方式加载代码(例如,从Emacs / SLIME,使用其他目标/插件或从REPL)。