我正在學習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