gpt4 book ai didi

clojure - 如何在Clojure中获取var的命名空间?

转载 作者:行者123 更新时间:2023-12-02 01:09:35 25 4
gpt4 key购买 nike

我目前正在使用以下有效的方法 - 但它似乎有点困惑

(defn get-namespace
[qualified-var]
{:pre [(var? qualified-var)]}
(the-ns
(symbol
(apply str (drop 2 (first (str/split (str qualified-var) #"/")))))))

忽略丑陋的字符串拆分(快速和肮脏)是否有内置功能可以做到这一点?

最佳答案

var 的元数据在 :ns 下包含对其命名空间的引用。 key 。那将是定义 var 的命名空间。可以使用 meta 访问 var 的元数据功能。综合起来,我们得到 (-> some-var meta :ns)我们可以做一些实验:

(def x "foo")
;; #'user/x
(-> #'x meta :ns)
;; #object[clojure.lang.Namespace 0x396bcdb0 "user"]
(-> #'clojure.core/map meta :ns)
;; #object[clojure.lang.Namespace 0x28412381 "clojure.core"]

一个完整的例子可能如下所示:
(defn var-namespace
[qualified-var]
{:pre [(var? qualified-var)]}
(-> qualified-var meta :ns))

关于clojure - 如何在Clojure中获取var的命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45641839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com