2011-08-23 3 views
7

defrecord는 명명 된 매개 변수를 지원합니까?명명 된 매개 변수를 defrecord로 저장 하시겠습니까?

(defrecord Person [name age]) 

내가 이런 일을 수행 할 수 있습니다 :이 같은이있는 경우 경우 즉

(Person. {:age 99 :name "bob"}) 
(Person. :age 99 :name "bob") 

제가 인터넷 검색으로 볼 수있는 유일한 것은이 같은 물건 :

(Person. "bob" 99) 

어떤 덜 명확하게 보입니다 ...

+3

Clojure 1.3에 추가 된 defrecord는 자동으로 생성자를 생성합니다. map-> Person http://dev.clojure.org/display/design/defrecord+improvements –

답변

0

현재로.

은 그러나 당신은 매개 변수의 이름을 지정 잊고 확장지도를 사용할 수 있습니다

(defrecord Person []) 

(Person. nil {:age 99 :name "bob"}) 

나는 개인적으로 이것이 당신이 가능 필드의 수가 많은 경우 레코드를 사용하는 가장 쉬운 방법으로 찾을 수 있습니다.

+0

ok를 참조하십시오.하지만지도 전에는 무엇을하지 않습니까? – Kevin

+0

메타 데이터를 원할 경우 ...... – mikera

+0

감사합니다. 가장 합리적인 해결 방법 인 것처럼 보이기 때문에 이것을 정답으로 표시하겠습니다. – Kevin

4

는 내장,하지만 당신은 뭔가를 사용할 수 없음 :

(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") 

당신이 원하는 무엇을 할 것이라고 얼마나 적합하지 않습니다 확인합니다.

관련 문제