2012-10-31 21 views
32

雖然defrecord是 - 適用於Clojure的一般病例用於定義一個「實體」,在ClojureScript一個可以找到更爲引用deftype,這反映在variousdocumentation優選形式。DEFTYPE與defrecord

這兩種形式有什麼區別?應該選擇哪一個?

回答

43

deftype創建實現協議的裸骨對象。

defrecord創建實現協議的不可變持久映射。

要使用哪個取決於你想要的。你想要一個完整的ClojureScript數據結構嗎?然後使用記錄。你只想要一個除了滿足協議外什麼都不做的簡單的東西?然後使用一個類型。

您引用的文檔的兩位使用的類型是因爲它們試圖說明最基本的協議,並且類型比記錄更少「繼續」,可以這麼說。但是,在Clojure/ClojureScript中,大多數真實世界中使用類對象事物都需要將數據字段與對象一起存儲,並且爲此應該強調使用記錄,出於同樣的原因,您應該使用任何Clojure的不變集合。