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))
но они кажутся уродливыми. Есть ли способ лучше? Если нет, то какое из вышеперечисленных вопросов является самым идиоматическим?
Ответы
Ответ 1
Это работало для меня без использования eval:
user> (defn mycar [x] (first x))
#'user/mycar
user> ((resolve (symbol "mycar")) [1 2 3])
1
Это работает, потому что resolves находит mycar var в текущем пространстве имен, а var вызывает функцию, с которой она связана. Это более короткая версия вашего первого примера. Я бы использовал его только для того, чтобы избежать использования eval.