在clojure 1.2RC1中,我希望获得一个基于其名称为字符串的函数并对其进行评估.
功能定义
(ns my-ns)
(defn mycar [x] (first x))
Run Code Online (Sandbox Code Playgroud)
以下工作:
((ns-resolve *ns* (symbol "mycar")) '(3 4))
((intern *ns* (symbol "mycar")) '(3 4))
((eval (symbol "mycar")) '(3 4))
Run Code Online (Sandbox Code Playgroud)
但他们看起来很难看.有没有更好的办法?如果没有,上面哪个是最惯用的?
Ray*_*yne 13
这对我有用而不使用eval:
user> (defn mycar [x] (first x))
#'user/mycar
user> ((resolve (symbol "mycar")) [1 2 3])
1
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为resolve在当前命名空间中找到mycar var,而var调用它绑定的函数.这是您的第一个示例的简短版本.我只是为了避免使用eval而使用它.