2015-02-23 70 views
2

如果我有一个像有没有办法执行面向Clojure的反射?

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

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

回答

6

功能瓦尔有:

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

这是最接近的Clojure有一个通用的反射机制,但要注意,它仅适用于使用自定义函数'defn'。由于元数据附加到var,因此它不适用于使用'(fn)'创建的匿名函数。 – Alex 2015-02-23 15:10:17

+0

知道这真的很有用,谢谢。看起来像一个奇怪的疏忽。 – AdamC 2015-02-23 15:27:18

2

相关的元数据,使您能够确定一个函数具有参数的数目,e.g你可以通过调用(meta #'ab_func)可以访问该函数的参数列表。

(此外,名ab-func会更符合Clojure的命名convenctions比ab_func

+0

感谢关于命名约定的说明......我只是在学习clojure。 – AdamC 2015-02-23 15:27:56

相关问题