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

vra*_*age 4 metadata clojure type-hinting

我正在寻找提取函数参数的类型提示信息,但是我似乎找不到一种访问该信息的方法。

例如,说我具有以下功能:

(defn ^Double do-something [^String a, ^String b]
  5.0)
Run Code Online (Sandbox Code Playgroud)

拉标签很简单:

(:tag (meta #'do-something)) ; => java.lang.Double
Run Code Online (Sandbox Code Playgroud)

但是,对于参数,这样的事情将不起作用:

(:arglists (meta #'do-something)) ; => ([a b])
Run Code Online (Sandbox Code Playgroud)

这只是给我参数而不是类型信息。是否有一种方式来获得的类型ab

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

仅出于文档编制目的而向代码中添加类型提示似乎不是一个特别好的主意,但我只想使用该信息(如果该信息已经存在,并且不存在其他类型信息的话,例如使用core.typed)。

Tom*_*omo 5

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

user=> (map meta (first (:arglists (meta #'do-something))))
({:tag String} {:tag String})
Run Code Online (Sandbox Code Playgroud)