I like to try and keep my level of nesting under control, and this
often involves hiding or re-structuring the let macro. The for macro
can implicitly assemble a let macro for you, but with a limitation
that the :let clause can't be first:

1:5 user=> (for [:let [z [:foo :bar]] x z] (name x))
java.lang.IllegalStateException: Can't pop empty vector (repl-1:5)
1:6 user=> (for [x [:foo :bar] :let [z (name x)]] z)
("foo" "bar")
1:7 user=>

Is this limitation intentional?  Could the error message be improved?

Here's what I wanted to write:

(defn add-script-links-for-imported-javascript-libraries
        [env dom-nodes]
        (extend-dom dom-nodes [:html :head] :top
                (template-for [:let [aggregation (-> env :cascade 
:resource-aggregation)
                                          libraries (@aggregation :libraries)]
                                    asset-map libraries
                                    :let [path (to-asset-path env asset-map)]]
                        :script { :type "text/javascript" :src path } [ 
linebreak ])))  


(the formatting is probably scrambled)

But I had to juggle it to this:

(defn add-script-links-for-imported-javascript-libraries
        [env dom-nodes]
        (let [aggregation (-> env :cascade :resource-aggregation)
               libraries (@aggregation :libraries)]
                (extend-dom dom-nodes [:html :head] :top
                        (template-for [asset-map libraries
                                            :let [path (to-asset-path env 
asset-map)]]
                                :script { :type "text/javascript" :src path } [ 
linebreak ])))) 


Of course there are any number of ways to write this, but I prefer the
first option, as it does less of a job of obscuring what the main
point of the function is: a call to extend-dom.

-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to
learn how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

--~--~---------~--~----~------------~-------~--~----~
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