gpt4 book ai didi

Clojure记录: how to get hinted type given an attribute name

转载 作者:行者123 更新时间:2023-12-04 04:27:23 26 4
gpt4 key购买 nike

我想知道是否有一种方法可以检索与用defrecord声明的属性相关联的类型提示。例如,如果我有以下记录定义:

(defrecord Foo [^Integer id ^String description])

我想检索一张 Foo类型的 map ,该 map 为我提供属性及其提示类型。我知道我可以通过反射得到声明的属性的列表:
(->> record .getDeclaredFields (remove #(java.lang.reflect.Modifier/isStatic (.getModifiers #))))

这确实给了我一个声明字段的列表,但是它们的类型是 Object。我知道Clojure是一种动态语言,但是如果在需要时将类型提供给我,那会很好。

最佳答案

类型提示不保留在任何地方。您可以通过编写用于defrecord的包装宏来保留类型信息,从而由用户自己管理。您可以例如为记录类型生成一个生成函数,该函数将实例和字段上的元数据丰富起来:

(defrecord-hinted Foo [^Integer id ^String description])

; you could then acces the type information with
(->> (meta (make-Foo 42 "forty two"))
::field-types
:id) ; => java.lang.Integer.class

关于Clojure记录: how to get hinted type given an attribute name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5070652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com