2

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

这是一个人为的例子:

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

这将创建一个名为view-data. (我的数据库查询是数据驱动的,所以我可以创建一个具有指示性名称的函数来调用特定查询)

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

maven 输出表明文件本身编译得很好,但是 slime 会话不知道这些函数。

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

4

2 回答 2

1

我的项目中有一个文件,require其中包含所有名称空间,它使 repl 中每个位置的所有功能都可用。也许有一种更优雅的方式来做到这一点,但这个黑客对我来说非常可靠。

于 2011-03-18T16:44:59.457 回答
1

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

我对 maven 的 clojure:swank 了解不够,但在我看来,就像 leiningen 一样,swank 目标只会为您的项目设置类路径并加载 swank 代码,但不会加载项目中的任何代码。所以在那之后你仍然会以某种方式加载你的代码(例如;从 Emacs/SLIME,使用其他一些目标/插件或从 REPL)。

于 2011-03-18T19:19:15.397 回答