Вызов функции из строки с именем функций в Clojure Как я могу вызвать функцию со строкой? например что-то вроде этого: (call "zero?" 1) ;=> false Ответ 1 Простой ответ: (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) Ответ 2 Что-то вроде: (defn call [^String nm & args] (when-let [fun (ns-resolve *ns* (symbol nm))] (apply fun args)))
Ответ 1 Простой ответ: (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)
Ответ 2 Что-то вроде: (defn call [^String nm & args] (when-let [fun (ns-resolve *ns* (symbol nm))] (apply fun args)))