Skip to content

Instantly share code, notes, and snippets.

@carcigenicate
Created August 18, 2018 16:20
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 carcigenicate/cf927b132472b0a01686b150dea24db4 to your computer and use it in GitHub Desktop.
Save carcigenicate/cf927b132472b0a01686b150dea24db4 to your computer and use it in GitHub Desktop.
(ns workers)
(defrecord Worker [write-f get-f])
; Just access the "workers" map by key name. (workers :worker-1)
(def workers
{:worker-1 (->Worker (fn [data file])
(fn [params]))
:worker-2 (->Worker (fn [data file])
(fn [params]))
:worker-3 (->Worker (fn [data file])
(fn [params]))})
; And if you don't want to have to write "->Writer" over and over
(let [w ->Worker]
(def workers
{:worker-1 (w (fn [data file])
(fn [params]))
:worker-2 (w (fn [data file])
(fn [params]))
:worker-3 (w (fn [data file])
(fn [params]))}))
; And it could arguably be made even more "compact" (at least when defining the "raw" workers)
(def raw-workers
[:worker-1 [(fn [data file])
(fn [params])]
:worker-2 [(fn [data file])
(fn [params])]
:worker-3 [(fn [data file])
(fn [params])]])
(def workers
(->> raw-workers
(partition 2)
(map vec)
(map #(update % 1 (partial apply ->Worker)))
(into {})))
; You might even find that you don't need to Worker record, although they're nice for organization
; Then, once you have a Worker, you can just deconstruct it:
(let [worker (workers :worker-1)
{:keys [write-f get-f]} worker]
(comment Use write-f and get-f here, or in a different ns))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment