Вызов функции из строки с именем функции в Clojure - PullRequest
23 голосов
/ 03 октября 2010

Как я могу вызвать функцию со строкой?например, что-то вроде этого:

(call "zero?" 1) ;=> false

Ответы [ 2 ]

28 голосов
/ 03 октября 2010

Что-то вроде:

(defn call [^String nm & args]
    (when-let [fun (ns-resolve *ns* (symbol nm))]
        (apply fun args)))
15 голосов
/ 29 ноября 2013

Простой ответ:

(defn call [this & that]
  (apply (resolve (symbol this)) that))

(call "zero?" 1) 
;=> false

Просто для удовольствия:

(defn call [this & that]
  (cond 
   (string? this) (apply (resolve (symbol this)) that)
   (fn? this)     (apply this that)
   :else          (conj that this)))

(call "+" 1 2 3) ;=> 6
(call + 1 2 3)   ;=> 6
(call 1 2 3)     ;=> (1 2 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...