我想定义一个实现 ISeq 和 ISeqable 的记录类型,但我希望它能在使用函数比如 map
时仍然输出原始的记录类型。这种记录类型将“包含”一个序列,但也包含一些我希望即使在使用了 map 后仍保持相关性的其他数据。
例如
`
(defrecord Person [readingList name])
(def p (Person. '("book 1", "book 2") "Jane"))
(map #(capitalize %) p)
; 应该产出 (Person. '("Book 1", "Book 2") "Jane"))
`
我意识到我可以在记录之外处理映射书单,但是我想要把 Person
记录看作一个序列,这个序列在处理时会携带一些数据。
我发现很难理解这是否可行。我没有找到一个很好的地方来记录 Clojure 的常见个体协议,以及实现特定协议需要什么。
我想可能如果我可以定义 cons
,就可行了,但是看起来 cons
不是一个 ISeq 或 ISeqable 中的协议函数,因为它不以记录本身作为其第一个参数。