Подтвердить что ты не робот

Clojure разрешающая функция из имени строки

В 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))

но они кажутся уродливыми. Есть ли способ лучше? Если нет, то какое из вышеперечисленных вопросов является самым идиоматическим?

4b9b3361

Ответ 1

Это работало для меня без использования eval:

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

Это работает, потому что resolves находит mycar var в текущем пространстве имен, а var вызывает функцию, с которой она связана. Это более короткая версия вашего первого примера. Я бы использовал его только для того, чтобы избежать использования eval.