开发者

clojure resolving function from string name

In clojure 1.2RC1, I wish to obtain a function based on its name as string and evaluate it.

Function definition

(ns my-ns)

(defn mycar [x] (first x))

The following worked:

((ns-resolve *ns* (symbol "mycar")) '(3 4))
((intern *ns* (symbol "mycar")) '(3 4))
((eval (symbol "mycar")) '(3  4))

but they seem ugly. Is there a better way? If not, which of the above is the most idiomatic开发者_StackOverflow中文版?


This worked for me without using eval:

user> (defn mycar [x] (first x))
#'user/mycar
user> ((resolve (symbol "mycar")) [1 2 3])
1

This works because resolves finds the mycar var in the current namespace and the var calls the function it's bound to. This is a shorter version of your first example. I'd use it just so that I could avoid using eval.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜