2010-03-09 3 views

Répondre

14

Pour appeler un fonction liée à Var myfn1 donné la chaîne "myfn1", vous pouvez faire quelque chose comme ceci:

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

Ainsi, compte tenu de votre vecteur exemple et en supposant que vous n'avez pas besoin de passer des arguments supplémentaires à vos fonctions (il est assez straighforward pour modifier ce code si vous le faites), vous pouvez faire ce qui suit:

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

(Les nil s sont les valeurs de retour des fonctions d'impression, notez comment il n'y a pas linebreak après la asdf produit par print et le asdf produit par prn est cité.)