在Clojure中获取函数的参数类型提示

时间:2014-09-30 08:35:16

标签: clojure metadata type-hinting

我希望提取函数参数的类型提示信息,但我似乎无法找到访问该信息的方法。

例如,假设我有以下功能:

(defn ^Double do-something [^String a, ^String b]
  5.0)

拉标签很简单:

(:tag (meta #'do-something)) ; => java.lang.Double

但是,对于这些参数,这样的东西不起作用:

(:arglists (meta #'do-something)) ; => ([a b])

这只是给我参数而不是类型信息。有没有办法获得ab的类型?

我想这样做的原因是因为我正在编写一个分析/记录函数的工具,如果函数是类型提示,我想知道。

为了文档的唯一目的而向代码添加类型提示似乎不是一个特别好的主意,但我只是想使用这些信息,如果它已经存在,并且如果没有其他类型信息(例如也许如果使用了core.typed)。

1 个答案:

答案 0 :(得分:5)

您需要获取参数的元数据:

user=> (map meta (first (:arglists (meta #'do-something))))
({:tag String} {:tag String})