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

获取Clojure中函数的参数类型提示,clojure,metadata,type-hinting,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]) 这只是给我参数,而不

我想提取函数参数的类型提示信息,但似乎找不到访问该信息的方法

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

(defn ^Double do-something [^String a, ^String b]
  5.0)
拉标签很简单:

(:tag (meta #'do-something)) ; => java.lang.Double
然而,对于论点来说,类似这样的东西是行不通的:

(:arglists (meta #'do-something)) ; => ([a b])
这只是给我参数,而不是类型信息。有没有办法获取
a
b
的类型

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


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

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

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

这很有效,谢谢你。我现在觉得自己很愚蠢。我之前也试着在args上调用
meta
,但现在我意识到我的错误是没有注意到我正在处理一个向量列表。考虑到多元和可变函数也是可能的,这是有意义的。