开发者

clojure resolving function from string name

开发者 https://www.devze.com 2023-01-10 10:25 出处:网络
In clojure 1.2RC1, I wish to obtain a function based on its name as string and evaluate it. Function definition

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

精彩评论

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