我正在学习Clojure并享受它,但在记录中发现不一致性令我感到困惑:为什么创建新记录时默认映射构造函数(map-> Whatever)不检查数据完整性?例如:Clojure:从地图创建记录时确保数据完整性?
user=> (defrecord Person [first-name last-name])
#<[email protected] user.Person>
user=> (map->Person {:first-name "Rich" :last-name "Hickey"})
#user.Person {:first-name "Rich" :last-name "Hickey"}
user=> (map->Person {:first-game "Rich" :last-name "Hickey"})
#user.Person {:first-game "Rich" :first-name nil :last-name "Hickey"}
相信地图不需要定义记录定义中的所有领域,它也允许包含额外的字段不在记录定义的一部分。我也明白,我可以定义我自己的构造函数,它包装了默认的构造函数,我认为一个:post
条件可以用来检查正确(和全面)的记录创建(尚未成功实现该功能)。
我的问题是:是否有一个习惯Clojure的方式来验证从地图记录建设期间的数据?而且,我在这里错过了关于唱片的东西吗?
谢谢。
我真的很少有需要转换地图 一个记录。我只是使用原始的构造函数。什么是用例?如果你正在序列化,你可以使用EDN来保证安全。 – Carcigenicate
我只是在重构一个旧的代码问题,它使用地图来现在使用记录来理解他们的属性。 JSON - >地图矢量将成为JSON - >记录矢量。 Thx用于EDN参考。将调查。 – ericky