在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))
但是他们看起来很难看。有没有更好的办法?如果没有,上面哪个是最惯用的?
答案 0 :(得分:13)
这对我有用,而不使用eval:
user> (defn mycar [x] (first x))
#'user/mycar
user> ((resolve (symbol "mycar")) [1 2 3])
1
这是有效的,因为resolve在当前命名空间中找到mycar var,而var调用它绑定的函数。这是您的第一个示例的简短版本。我只是为了避免使用eval而使用它。