Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;; Using plain maps.
- (let [id-generator-value (atom 0)]
- (defn id-generator-next []
- (swap! id-generator-value inc)))
- (defn make-ID
- ([] (make-ID {}))
- ([m] (assoc m :id (id-generator-next))))
- (defn make-Widget [& {:keys [element-type] :or {element-type "div"}}]
- (let [widget (make-ID)]
- (assoc widget :element-type element-type)))
- > (make-Widget)
- {:element-type "div", :id 21}
- > (make-Widget :element-type "p")
- {:element-type "p", :id 22}
- >
- ;;; Using defrecord.
- (defrecord IDMixin
- [id])
- (defn make-IDMixin
- ([] (IDMixin. (id-generator-next)))
- ([obj] (assoc obj :id (id-generator-next))))
- (defrecord Widget
- [element-type])
- (defn make-Widget [& {:keys [element-type] :or {element-type "div"}}]
- (let [widget (make-IDMixin)]
- (assoc widget :element-type element-type)))
- > (make-Widget)
- #user.IDMixin{:id 15, :element-type "div"}
- > (make-Widget :element-type "p")
- #user.IDMixin{:id 16, :element-type "p"}
- > (.id (make-Widget :element-type "p"))
- 17
- >
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement