在clojure 1.2RC1中,我希望基于其名称作为字符串来获取一个函数并对其进行评估。
功能定义
(ns my-ns)
(defn mycar [x] (first x))
以下工作:
((ns-resolve *ns* (symbol "mycar")) '(3 4))
((intern *ns* (symbol "mycar")) '(3 4))
((eval (symbol "mycar")) '(3 4))
但它们看起来很丑。有没有更好的办法?如果不是,那么以上哪个是最惯用的?
最佳答案
这对我有用,而无需使用eval:
user> (defn mycar [x] (first x))
#'user/mycar
user> ((resolve (symbol "mycar")) [1 2 3])
1
之所以有效,是因为resolves在当前 namespace 中找到了mycar var,并且var调用了它所绑定(bind)的函数。这是第一个示例的简短版本。我只是为了避免使用eval而使用它。