in clojure У меня есть вектор [ "myfn1" "myfn2" "myfn3" ] как я могу вызвать функции с именем "myfn1"... используя строки из этого вектора
Clojure строка преобразования типа в символ
Ответ 1
Чтобы вызвать функцию, связанную с Var myfn1
с учетом строки "myfn1"
, вы можете сделать что-то вроде этого:
((resolve (symbol "myfn1")) ...) ; ... indicates where to put any arguments
Итак, учитывая ваш примерный вектор и предполагая, что вам не нужно передавать какие-либо дополнительные аргументы в свои функции (достаточно, чтобы изменить этот код, если вы это сделаете), вы можете сделать следующее:
(map #((resolve (symbol %))) ["myfn1" "myfn2" "myfn3"])
например.
user=> (map #((resolve (symbol %1)) %2) ["println" "print" "prn"] ["asdf" "asdf" "asdf"])
(asdf
asdfnil "asdf"
nil nil)
(nil
- это возвращаемые значения из функций печати, обратите внимание на то, что нет строки после asdf
, созданной print
, и asdf
, вырабатываемый с помощью prn
.)