Created
August 18, 2018 16:20
-
-
Save carcigenicate/cf927b132472b0a01686b150dea24db4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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