Clojure 如何使命名空间中的符号在没有限定符的所有命名空间中都可访问?

Clojure 如何使命名空间中的符号在没有限定符的所有命名空间中都可访问?,clojure,namespaces,Clojure,Namespaces,我有只在开发中使用的带有调试实用程序的名称空间。我想让它们在所有名称空间中无需限定符即可访问(与clojure.core中的符号相同) 假设我的项目结构如下: dbg_utils.clj: db.clj 在我想启动REPL并键入如下内容后: > (require 'project.db) > (require 'project.dbg-utils) > (globalize-symbol 'project.dbg-utils/dbg) 在使用无限定符的dbg宏后: (ns p

我有只在开发中使用的带有调试实用程序的名称空间。我想让它们在所有名称空间中无需限定符即可访问(与
clojure.core
中的符号相同)

假设我的项目结构如下:

dbg_utils.clj:

db.clj

在我想启动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
  ...)

是否有类似于全球化符号(或接近此符号)的功能可用?

莱宁根为此提供了
:injections
功能和
:user
配置文件


分享一些关于如何做到这一点的建议。它基本上是通过添加您想要
clojure.core
的调试函数来工作的,并且由于在使用
ns
宏时始终包含此命名空间中的所有公共变量(除非您另有指定),您的所有名称空间中都可以使用它们。

您想不使用
require
和/或
intern
?PiotrekBzdyl可能我的问题还没有形成好。“让我重新措辞一下。”PiotrekBzdyl回答你的问题:是的,我希望访问它们时不使用
require
名称空间
dbg utils
名称空间。您试图解决的问题是:到处都需要这样的名称空间很麻烦,或者在生产模式下调试宏的潜在开销?您可以使用leiningen的
:injections
功能和
:user
配置文件。分享一些关于如何做到这一点的建议。它基本上是通过将所有名称空间中所需的函数添加到
clojure.core
中来工作的,因为在使用
ns
宏时,它的所有公共变量都始终包括在内。
> (require 'project.db)
> (require 'project.dbg-utils)
> (globalize-symbol 'project.dbg-utils/dbg)
(ns project.db) ;; no require of project.dbg-utils

(defn create-entity [...]
  (dbg ...) ;; and no qualifier here
  ...)