2010-03-09 9 views

risposta

14

Per chiamare un la funzione destinata a Var myfn1 dando la stringa "myfn1", si potrebbe fare qualcosa di simile:

((resolve (symbol "myfn1")) ...) ; ... indicates where to put any arguments 

Quindi, dato il vostro esempio vettoriale e partendo dal presupposto che non c'è bisogno di passare argomenti aggiuntivi per le funzioni (è sufficiente straighforward per modificare questo codice se lo fai), puoi fare quanto segue:

(map #((resolve (symbol %))) ["myfn1" "myfn2" "myfn3"]) 

E.g.

user=> (map #((resolve (symbol %1)) %2) ["println" "print" "prn"] ["asdf" "asdf" "asdf"]) 
(asdf 
asdfnil "asdf" 
nil nil) 

(I nil s sono i valori di ritorno delle funzioni di stampa; notare come non c'è interruzione di riga dopo la asdf prodotto da print e la asdf produce da prn è citato.)