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
...)