The same reason that hiccup tag vector is taking optional attribute
map.
It's more readable.

(my-widget {:id "id1"} "hello" "world")

vs.

(my-widget {:attr {:id "id1"} :contents '("hello" "world")})

On Jun 4, 2:38 am, "Jim - FooBar();" <jimpil1...@gmail.com> wrote:
> On 03/06/13 18:22, Alice wrote:
>
> > I often need to do this when writing hiccup helper functions:
>
> > (defn my-widget
> >    [& args]
> >    (let [attrs    (if (map? (first args)) (first args) {})
> >          contents (if (map? (first args)) (next args) args)]
> >      ...
>
> > I found this post, but considering that it is 4 years old, is there
> > any new library developed to help with this situation?.
>
> >https://groups.google.com/group/clojure/browse_frm/thread/125a8af6881...
>
> why are you not using named arguments? Is there somethign in hiccup that
> prevents you from doing so? It seems to me they would save you quite a
> bit of hassle and make the code more evident...
>
> (defn my-widget
>    [& {:keys [attrs contents]}]
>    ...
>
> or if you don't know exactly what keys will come in you can relax it a
> bit with  (defn my-widget  [& {:as opts]}] ...
>
> HTH,
>
> Jim
>
> ps: assuming there is no constrain I'd go for this one:
>
> (defn my-widget
>    ([attrs contents] ...)
>    ([contents] (my-widget {} contents))
>    ([] (my-widget {} []))

-- 
-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to