Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以执行面向Clojure的反射?_Clojure - Fatal编程技术网

有没有一种方法可以执行面向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。