我想定义一个实现 ISeq 和 ISeqable 的记录类型,但我想让它与像 map
这样的函数一起工作,同时仍然输出原始记录类型。这个记录类型将“包含”一个序列,同时还包含一些我想保留的数据,即便是在我调用 map 的时候。
例如:
`
(defrecord Person [readingList name])
(def p (Person. '("book 1", "book 2") "Jane"))
(map #(%1 capitalize) p)
; 应该产生 (Person. '("Book 1", "Book 2") "Jane"))
`
我明白我可以在记录外部处理映射的列表,但为了我的用途,我想将 Person
记录视为一个序列,该序列在处理过程中恰好有一些后续数据。
我很难理解这是否可能。我没有找到很好地记录 Clojure 常见个体协议的地方,以及实现特定协议所需的内容。
我想,也许如果能定义 cons
,这就可能实现,但它看起来并不像是 ISeq 或 ISeqable 协议中的一个函数,因为它的第一个参数不是记录本身。