I've modified clojure.core/destructure to support this new binding
syntax.
https://gist.github.com/doffltmiw/5730721
Here are some tests:
(let2 [[(a map?) b] [{:p 1} 2]]
[a b])
;= [{:p1 1} 2]
(let2 [[(a map?) b] [2]]
[a b])
;= [nil 2]
(let2 [[(a map? {:p "default"}) b] [2]]
[a b])
;= [{:
What about adding this new binding syntax?
[(attrs map?) & contents] ; optional first map argument
[(attrs map? {}) & contents] ; with default value
[(s String)]
; is shorthand for
[(s #(instance? String %))]
; a function taking optional map, vector, string arguments.
[(m map?) (v vec
Hi,
there is always the possibility of a macro.
(defmacro defwidget
[name & body]
(let [[docstring [attrs _ contents] body]
(if (string? (first body))
[(first body) (second body) (nthnext body 2)]
[nil (first body) (next body)])]
`(d
> (defn my-widget
> ([attrs contents] (apply widget-creator attrs contents)) ;;I have no idea
> what widget-creator might be
> ([contents] (my-widget {} contents))
> ([] (my-widget {} []))
contents of one arity version can be a map. so the code should be
(defn my-widget
([attrs c
On 03/06/13 19:04, Alice wrote:
It's more readable.
(my-widget {:id "id1"} "hello" "world")
you can get to almost exactly that with the last variant I posted.
(defn my-widget
([attrs contents] (apply widget-creator attrs contents)) ;;I have no idea
what widget-creator might be
([conten
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();" wrote:
> On 03/06/13 18:22, Alice wrote:
>
> > I often need
I sometimes need to inspect or modify the map in the function, but
defelem only merges the map.
On Jun 4, 2:30 am, gaz jones wrote:
> You could look at the impl:
>
> https://github.com/weavejester/hiccup/blob/master/src/hiccup/def.clj
>
>
>
>
>
>
>
> On Mon, Jun 3, 2013 at 12:22 PM, Alice 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
You could look at the impl:
https://github.com/weavejester/hiccup/blob/master/src/hiccup/def.clj
On Mon, Jun 3, 2013 at 12:22 PM, 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