gpt4 book ai didi

clojure - 如何在 Clojure 中以字符串形式获取函数名称?

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

如何在 Clojure 中以字符串形式获取函数名称?

到目前为止,我所拥有的看起来一点也不符合惯用语:

(defn fn-name
[f]
(first (re-find #"(?<=\$)([^@]+)(?=@)" (str f))))

(defn foo [])

(fn-name foo) ;; returns "foo"

编辑:根据提供的提示,我组合了一个基本宏来完成我想要的操作。是不是看起来好多了?

(defmacro fn-name
[f]
`(-> ~f var meta :name str))

最佳答案

对于使用 defn 形式定义的函数:

user> (-> #'map meta :name)
map
user> (defn nothing [& _])
#'user/nothing
user> (-> #'nothing meta :name)
nothing

这需要访问 var,而不仅仅是 var 所保存的函数值。

关于clojure - 如何在 Clojure 中以字符串形式获取函数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22116257/

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