2012-05-25 52 views
11

有沒有類似struct-map的記錄?如果不是,我應該使用一個結構體(文檔不鼓勵使用結構體)?如何從地圖填充Clojure記錄?

也許我完全是在做錯誤的事情?我有一個相當複雜的功能,它目前需要一個選項圖。我試圖澄清哪些選項值是可以接受/使用的(通過將其替換爲記錄)。現在我想將它與接口中包含此信息(並且包含記錄中數據超集)的代碼連接起來。

回答

19

不建議簡單地將記錄用於「文檔」 - 簡單的舊地圖更靈活,更簡單,更容易。對於文檔,您只需添加一個文檔字符串或註釋,或者創建一個像(defn make-whatever [thing1 thing2])這樣的函數。

如果你還想要一個記錄,你有幾個選擇,取決於你是否使用clojure版本1.3或更高版本。如果是這樣,(defrecord Whatever ...)也定義了一個map->Whatever函數和一個帶位置參數的函數。如果沒有,你可以寫(into (Whatever. nil nil nil) some-map)(爲記錄類型傳遞正確數目的nils)。