Если у меня есть функция, как
(defn ab_func [a b]
(* a b))
Как мне использовать отражение, чтобы определить, что ab_func принимает два аргумента? clojure.reflect, кажется, является интерфейсом для механизма отражения Java ... Я ищу некоторый уровень отражения, который не требует понимания Java-реализации clojure.
2 ответа
Переменные функций имеют связанные метаданные, которые позволят вам определить количество аргументов, которые принимает функция, например:
(-> (meta #'ab_func) :arglists first count)
=> 2
Вы можете получить доступ к спискам аргументов функции, вызвав (meta #'ab_func)
.
(Кроме того, имя ab-func
больше соответствовало бы правилам именования Clojure, чем ab_func
.)
Похожие вопросы
Новые вопросы
clojure
Clojure - это современный диалект Lisp для виртуальной машины Java (с версиями для CLR и JavaScript). Clojure - это не просто реализация Lisp в Java, он предоставляет доступ к классам и экосистеме Java.