有没有方便的方法来检查作为另一个函数的参数的函数的名称?例如,
(defn foo [a-fun] ...)
如何在运行时获得foo内部a-fun的实际名称?
答案 0 :(得分:1)
如果要获取函数的名称,为什么不将其作为参数传递?
您可以使用fully qualified name of a function获取resolve
。然后,您的代码将被调用:
(defn foo [a-fun]
;; no need to do anything to get the name
)
(foo (resolve 'bar))
答案 1 :(得分:0)
不,没有办法获取函数的名称。为什么?因为函数没有名称。在某些情况下,它们可能绑定到名称,但即使为函数定义名称,函数本身也没有名称。
例如,如果您运行:
(macroexpand '(defn foo []))
你会得到:
(def foo (clojure.core/fn ([])))
如您所见,defn
只是一个创建匿名函数并将其绑定到名称的宏。