有没有一种方法可以执行面向Clojure的反射?
如果我有一个函数有没有一种方法可以执行面向Clojure的反射?,clojure,Clojure,如果我有一个函数 (defn ab_func [a b] (* a b)) 如何使用反射确定ab_func接受两个参数?clojure.reflect似乎是Java反射机制的前端。。。我正在寻找一些不需要了解clojure的Java实现的反射级别。函数变量有相关的元数据,可以让您确定函数采用的参数数量,例如: (-> (meta #'ab_func) :arglists first count) => 2 您可以通过调用(meta#'ab_func)来访问函数的参数列表 (此
(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 func
比ab_func
更符合Clojure命名惯例)这是Clojure最接近通用反射机制的,但请注意,它仅适用于使用defn
定义的函数。由于元数据附加到var,因此它不适用于使用(fn)
创建的匿名函数。了解这一点非常有用,谢谢。似乎是个奇怪的疏忽。谢谢你关于命名约定的注释。。。我只是在学clojure。