首页 > 解决方案 > Clojure - 如何声明记录的集合或向量

问题描述

如何定义记录集合或记录向量?

我有这个片段代码:

(defrecord Transaction [a, b, c])

我想定义一个名为 LastTransactions 的 Transaction 集合来实现这样的函数:

(defn can-authorize
    "Validate Authorization by Transaction"
    [^Transaction transaction, ^LastTransactions lastTransactions]
    (... business logic)
    )

第一个问题,这是正确的方法吗?

其次,我如何声明该结构?

标签: data-structuresclojurerecord

解决方案


Clojure 的类型提示不提供任何类型验证 - 您可以为此使用Clojure SpecPlumatic Sc​​hema。它们仅用于编译器以防止在对参数调用 Java 方法时进行反射。为此,您不需要键入提示向量,因为 Clojure 的集合( 、 等)的核心函数在first设计conj上不需要对标准集合进行反射。

但是,如果需要,您可以键入提示从lastTransaction序列中提取的元素,例如:

(defn can-authorize
  "Validate Authorization by Transaction"
  [^Transaction transaction, lastTransactions]
  ...
  (for [^Transaction t lastTransactions]
    (...do-something-with t))

推荐阅读