在Clojure中,是否有一种更优雅的方法来查找函数的完全限定名称(已知具有元信息)而不是
(defn fully-qualified-name [fn]
(let [fn-meta (meta fn )
fn-ns (ns-name (:ns fn-meta))
]
(str fn-ns "/" (:name fn-meta))))
需要一个运行时解决方案。欢迎使用读取时间和编译时间解决方案。
在Clojure中,是否有一种更优雅的方法来查找函数的完全限定名称(已知具有元信息)而不是
(defn fully-qualified-name [fn]
(let [fn-meta (meta fn )
fn-ns (ns-name (:ns fn-meta))
]
(str fn-ns "/" (:name fn-meta))))
(resolve 'foo)
会返回名为“foo”的变量,以及该变量的完全限定名称。
user=> `(inc)
(clojure.core/inc)
user=> `(fn)
(clojure.core/fn)
(str
inc)`相当于完全限定名称。 有任何运行时解决方案吗? - christype
提供了一个完全限定的名称,无论元信息如何。
可以从.toString的输出开始:
user=> (.toString map)
"clojure.core$map@11af7bb"