Clojure自动需要文件

Clojure自动需要文件,clojure,Clojure,我正在尝试用clojure制作一个小的web框架。我在/handlers目录中有一堆clojure文件,我想在我的项目的.core名称空间中要求所有这些文件。每个文件都定义自己的名称空间。例如:project.handlers.home。这背后的想法是,当我添加新的处理程序时,我不想修改核心文件中的名称空间声明以包含它。我提出的唯一解决方案是找到目录中的所有文件,并使用clojure.core/load加载它们,但这远不是一个漂亮的习惯用法。有没有一种惯用的方法可以做到这一点 有没有一种惯用的方

我正在尝试用clojure制作一个小的web框架。我在/handlers目录中有一堆clojure文件,我想在我的项目的.core名称空间中要求所有这些文件。每个文件都定义自己的名称空间。例如:project.handlers.home。这背后的想法是,当我添加新的处理程序时,我不想修改核心文件中的名称空间声明以包含它。我提出的唯一解决方案是找到目录中的所有文件,并使用clojure.core/load加载它们,但这远不是一个漂亮的习惯用法。有没有一种惯用的方法可以做到这一点

有没有一种惯用的方法可以做到这一点

在Clojure中的习惯用法通常倾向于显式而不是“变魔术”,尤其是在命名全局对象时(自动加载名称空间显然是如此)

我不知道为什么你不想在添加新的处理程序时修改你的“核心”文件,但是你可能会考虑引入一个额外的命名空间来加载两个“核心”和你的处理程序并将它们挂钩在一起。

包括这样,使它成为在特定目录下加载命名空间的一个明确的API调用。请参阅以获取此示例。它使用它来自动加载路径

然而,由于涉及大量的魔法,以及该方法带来的额外复杂性(例如,延迟路径定义),黑色方法感觉不习惯


如果需要从工具、框架或库的角度查找名称空间,我将使用它们,然后要求/加载它们。这种方法在提供用户级可插拔性方面可能很有用,用户可以将处理程序放入目录中,然后在代码中看到新的选项,尽管显式的方法往往更干净。

尝试过什么吗?只不过是遍历目录并执行(clojure.core/load“file”).你应该在这个问题上表现出你的努力,你确实尝试了一些东西,你到底被困在哪里了。通常会显示一些代码。向下箭头表示:“这个问题没有显示任何研究成果;它不清楚或没有用处。”。如果你这样做,我相信你会得到答案。谢谢你的反馈。我希望问题现在更清楚。@Brunore事实上,现在关闭已重命名为“暂停”,您可以投票将问题暂停,因为“问题必须表明对正在解决的问题的最低理解。告诉我们您尝试了什么,为什么不起作用,以及它应该如何起作用。”