如何在运行时获取参数函数的名称?

时间:2015-09-22 14:58:18

标签: clojure

有没有方便的方法来检查作为另一个函数的参数的函数的名称?例如,

(defn foo [a-fun] ...)

如何在运行时获得foo内部a-fun的实际名称?

2 个答案:

答案 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只是一个创建匿名函数并将其绑定到名称的宏。