Advertisement
Guest User

Untitled

a guest
Jul 8th, 2011
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;;; Using plain maps.
  2.  
  3. (let [id-generator-value (atom 0)]
  4.   (defn id-generator-next []
  5.     (swap! id-generator-value inc)))
  6.  
  7.  
  8. (defn make-ID
  9.   ([] (make-ID {}))
  10.   ([m] (assoc m :id (id-generator-next))))
  11.  
  12.  
  13. (defn make-Widget [& {:keys [element-type] :or {element-type "div"}}]
  14.   (let [widget (make-ID)]
  15.     (assoc widget :element-type element-type)))
  16.    
  17.  
  18.    
  19.  
  20. > (make-Widget)
  21. {:element-type "div", :id 21}
  22. > (make-Widget :element-type "p")
  23. {:element-type "p", :id 22}
  24. >
  25.  
  26.  
  27.  
  28.  
  29. ;;; Using defrecord.
  30.  
  31. (defrecord IDMixin
  32.   [id])
  33.  
  34. (defn make-IDMixin
  35.   ([] (IDMixin. (id-generator-next)))
  36.   ([obj] (assoc obj :id (id-generator-next))))
  37.  
  38.  
  39. (defrecord Widget
  40.   [element-type])
  41.  
  42. (defn make-Widget [& {:keys [element-type] :or {element-type "div"}}]
  43.   (let [widget (make-IDMixin)]
  44.     (assoc widget :element-type element-type)))
  45.  
  46.  
  47. > (make-Widget)
  48. #user.IDMixin{:id 15, :element-type "div"}
  49. > (make-Widget :element-type "p")
  50. #user.IDMixin{:id 16, :element-type "p"}
  51. > (.id (make-Widget :element-type "p"))
  52. 17
  53. >
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement