Если у меня есть функция, как

(defn ab_func [a b]
  (* a b))

Как мне использовать отражение, чтобы определить, что ab_func принимает два аргумента? clojure.reflect, кажется, является интерфейсом для механизма отражения Java ... Я ищу некоторый уровень отражения, который не требует понимания Java-реализации clojure.

2
AdamC 23 Фев 2015 в 17:40

2 ответа

Лучший ответ

Переменные функций имеют связанные метаданные, которые позволят вам определить количество аргументов, которые принимает функция, например:

(-> (meta #'ab_func) :arglists first count)
=> 2
6
Symfrog 23 Фев 2015 в 14:56

Вы можете получить доступ к спискам аргументов функции, вызвав (meta #'ab_func).

(Кроме того, имя ab-func больше соответствовало бы правилам именования Clojure, чем ab_func.)

2
bsvingen 23 Фев 2015 в 14:57