我怎么知道作为字符串提供的函数名在当前上下文中是否可调用?类似的东西:
(callable? "asdasd") ;; false
(callable? "filter") ;; true
感谢
答案 0 :(得分:17)
您正在寻求决心,
(resolve (symbol "asd"))
返回nil
(resolve (symbol "filter"))
返回#'clojure.core / filter
检查var是否为函数(信用转到@amalloy):
(-> s symbol resolve deref ifn?)
答案 1 :(得分:1)
如果你需要这个,你做错了什么,但是......
(defn callable?
[s]
(let [obj (try (eval (symbol s)) (catch Exception e))]
(and obj (fn? obj))))
答案 2 :(得分:-1)
(defn callable? [name]
(clojure.test/function? (symbol name)))
UPD。我发现fn?
仅检查接口Fn
,但不适用于已解析的符号。虽然,clojure.test/function?
做了所需的事情,所以我更新了一个例子。