Sean Corfield <seancorfi...@gmail.com> writes:

> Most of my comments would be true of code in other languages (and
> Scala came to mind, specifically, as I was suggesting breaking code
> into smaller units to aid readability). I'm interested in hearing more
> about the sort of functions that begin "by unpacking and computing a
> large number of values that are all important for subsequent
> computations". I'm not seeing this in my code so I assume we're
> working on very different problem domains - could you elaborate?

I see this every so often, but it's usually easy to solve with partial.

(defn write-jar [project out-file filespecs]
  (let [manifest (make-manifest project)]
    (with-open [jar-os (-> out-file
                           (FileOutputStream.)
                           (BufferedOutputStream.)
                           (JarOutputStream. manifest))]
      (doseq [filespec filespecs]
        [HUGE GLOB OF CODE THAT USES project AND out-file]))))

The doseq call needed to be converted to a reduce so it could accumulate
some state, but the big glob of code to be extracted needed access to
the `project` and `out-file` locals. Reducing with a partially-applied
function makes this work nicely:

(defn write-jar [project out-file filespecs]
  (let [manifest (make-manifest project)]
    (with-open [jar-os (-> out-file
                           (FileOutputStream.)
                           (BufferedOutputStream.)
                           (JarOutputStream. manifest))]
      (reduce (partial copy-to-jar project jar-os) #{} filespecs))))

Just a thought. I can see where Mark is coming from, but I don't think
the workaround is particularly difficult or onerous.

-Phil

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to