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

时间:2015-02-23 14:40:36

标签: clojure

如果我有像

这样的功能
(defn ab_func [a b]
  (* a b))

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

2 个答案:

答案 0 :(得分:6)

函数变量具有关联的元数据,允许您确定函数所使用的参数数量,例如:

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

答案 1 :(得分:2)

您可以通过调用(meta #'ab_func)来访问函数的参数列表。

(此外,名称ab-func将更符合Clojure命名规则而不是ab_func。)