Skip to content

Instantly share code, notes, and snippets.

Created August 1, 2010 14:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/7f8962c6e77d8784b296 to your computer and use it in GitHub Desktop.
Save anonymous/7f8962c6e77d8784b296 to your computer and use it in GitHub Desktop.
(ns user)
;Version A
(def users
{:by-name (ref {})
:by-id (ref {})
:next-id (ref 0)})
(defn create-user
"Creates a user"
[name]
(dosync
(let [new-user {:name name :id @(users :next-id)}]
(alter (users :next-id) + 1)
(alter (users :by-name) conj {name new-user})
(alter (users :by-id) conj {(new-user :id) new-user})
new-user)))
(def jonas (create-user "Jonas"))
;Version B
(comment
(def users
(ref
{:by-name {}
:by-id {}
:next-id 0 })
)
(defn create-user
"Creates a user"
[name]
(dosync
(let [new-user {:name name :id (@users :next-id)}]
(alter users conj @users {:next-id (+ 1 (@users :next-id))})
(commute users conj @users {:by-name (conj (@users :by-name) {name new-user})})
(commute users conj @users {:by-id (conj (@users :by-id) {(new-user :id) new-user})})
new-user)))
(def jonas (create-user "Jonas"))
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment