2010-10-03 26 views

Respuesta

14

Una respuesta sencilla:

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

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

Sólo por diversión:

(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) 
28

Algo así como:

(defn call [^String nm & args] 
    (when-let [fun (ns-resolve *ns* (symbol nm))] 
     (apply fun args))) 
+1

Gracias, 'ns-resolve' en particular era lo que estaba buscando. –

+6

es mejor también combinar ns-resolve junto con fn? para verificar, ese símbolo es función –

Cuestiones relacionadas