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

Ada*_*amC 2 clojure

如果我有类似的功能

(defn ab_func [a b]
  (* a b))
Run Code Online (Sandbox Code Playgroud)

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

Sym*_*rog 6

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

(-> (meta #'ab_func) :arglists first count)
=> 2
Run Code Online (Sandbox Code Playgroud)

  • 这是最接近Clojure的通用反射机制,但请注意它只适用于用`defn`定义的函数.由于元数据附加到var,因此不能用于使用`(fn)`创建的匿名函数. (4认同)