【发布时间】:2016-05-24 13:03:40
【问题描述】:
我的命名空间带有仅用于开发的调试实用程序。我想让它们在所有没有限定符的命名空间中都可以访问(与 clojure.core 中的符号相同)。
假设我的项目结构如下:
dbg_utils.clj:
(ns project.dbg-utils)
(defmacro dbg ...)
db.clj
(ns project.db)
(defn create-entity [...]
...)
在我想启动 REPL 并输入如下内容之后:
> (require 'project.db)
> (require 'project.dbg-utils)
> (globalize-symbol 'project.dbg-utils/dbg)
在使用dbg 没有限定符的宏之后:
(ns project.db) ;; no require of project.dbg-utils
(defn create-entity [...]
(dbg ...) ;; and no qualifier here
...)
有类似globalize-symbol(或接近这个)的东西吗?
【问题讨论】:
-
你想不使用
require和/或intern吗? -
@PiotrekBzdyl 可能我的问题没有很好地形成。让我稍微改一下。
-
@PiotrekBzdyl 回答您的问题:是的,我想在没有
require'ingdbg-utils命名空间的情况下访问它们。 -
您要解决的问题是什么:到处都需要这样的命名空间或在生产模式下调试宏的潜在开销?
-
您可以使用 leiningen 的
:injections功能和:user配置文件。 This article 分享了一些关于如何做到这一点的建议。它基本上是通过将所有命名空间中所需的函数添加到clojure.core来工作的,因为在使用ns宏时总是包含它的所有公共变量。
标签: clojure namespaces