有没有办法执行面向 Clojure 的反射?

Is there a way to perform Clojure-oriented reflection?

如果我有这样的函数

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

如何使用反射来确定 ab_func 有两个参数? clojure.reflect 似乎是 Java 反射机制的前端......我正在寻找某种程度的反射,不需要理解 clojure 的 Java 实现。

函数变量具有关联的元数据,可让您确定函数采用的参数数量,例如:

(-> (meta #'ab_func) :arglists first count)
=> 2

您可以通过调用 (meta #'ab_func).

来访问函数的参数列表

(此外,名称 ab-funcab_func 更符合 Clojure 命名约定。)