defrecord是否支持命名參數?也就是說,如果,如果我有這樣的事情:clojure defrecord命名參數?
(defrecord Person [name age])
我可以做這樣的事情:
(Person. {:age 99 :name "bob"})
(Person. :age 99 :name "bob")
我通過谷歌搜索看到的唯一事情是這樣的東西:
(Person. "bob" 99)
哪似乎不太清楚......
defrecord是否支持命名參數?也就是說,如果,如果我有這樣的事情:clojure defrecord命名參數?
(defrecord Person [name age])
我可以做這樣的事情:
(Person. {:age 99 :name "bob"})
(Person. :age 99 :name "bob")
我通過谷歌搜索看到的唯一事情是這樣的東西:
(Person. "bob" 99)
哪似乎不太清楚......
它看起來像這還沒有被clojure支持?
http://david-mcneil.com/post/765563763/enhanced-clojure-records
不是內置的,但你可以使用類似:
(defmulti make-instance (fn [class & rest] class))
(defmacro defrecord* [record-name fields]
`(do
(defrecord ~record-name ~fields)
(defmethod make-instance (quote ~record-name) [_# & {:keys ~fields}]
(new ~record-name [email protected]))))
(defrecord* Person [name age])
(make-instance 'Person :age 99 :name "bob")
不知道如何適用,這將是你想要的東西。
在Clojure 1.3中,defrecord自動創建了一個構造函數,它使用一個名爲例如地圖 - >人 請參閱http://dev.clojure.org/display/design/defrecord+improvements –