我想知道是否有一种方法可以检索与使用defrecord声明的属性相关联的类型提示。例如,如果我有以下记录定义:
我想获取一个关于
(defrecord Foo [^Integer id ^String description])
我想获取一个关于
Foo
类型的地图,它会给我属性及其暗示类型。我知道可以通过反射获取已声明属性的列表:(->> record .getDeclaredFields (remove #(java.lang.reflect.Modifier/isStatic (.getModifiers #))))
这确实给了我一个声明字段的列表,但它们的类型是Object
。我知道Clojure是一种动态语言,但当我需要时,如果类型能够返回给我就更好了。
(let [i 42 desc "Forty two" record (Foo. i desc)] [(type (:id record)) (type (:description record))])
=>[java.lang.Integer java.lang.String]
。然而可能不是您想要的,因为:(let [i "Not and int" desc 999 record (Foo. i desc)] [(type (:id record)) (type (:description record))])
=>[java.lang.String java.lang.Integer]
。 - Wodin