0

你好,克洛朱利亚人,

众所周知,Clojure 的defrecord不尊重类型提示,任何类型的数据都可以放在记录字段中。我正在寻找一种方法来限制 Clojure 中的记录字段。

我开始尝试defrecord调用Prismatic Sc​​hema

(require '[schema.core :as sc])
(sc/defrecord Item [size :- Long, colour  :- String])

现在调用(->Item 1 2)只返回一个新Item实例,尽管第二个参数是数字而不是字符串。我希望构造函数调用抛出一些异常。

我尝试了以下方法来打开记录实例化的验证,但没有成功。

  • ^:always-validate元数据添加到 defrecord
  • 打电话(sc/set-fn-validation! true)
  • 打电话(sc/with-fn-validation (->Item 1 1))

是否可以在不编写自定义构造函数的情况下打开构造函数调用的模式验证?

谢谢您的帮助。

4

0 回答 0