On Wed, Jun 16, 2010 at 7:00 PM, Brian Carper <[email protected]> wrote:
> Given:
>
> (defn foo [x & {:as args}] [x args])
> (foo 1 :bar 2 :baz [:quux])
> => [1 {:bar 2, :baz [:quux]}]
>
> If I have those rest-arguments already in a map, what's the most
> elegant way to call foo with them?
>
> (def args {:bar 2 :baz [:quux]})
> (foo 1 ?????)
>
> I feel like I may be missing some simple way of doing it. I find
> myself needing to do this pretty often, for example any time I have a
> chain of functions calling each other that all take keyword arguments
> on the end.
>
I would do it like this, a la Python:
(defn foo [a b & {:keys [c d]}]
(println a b c d))
(defn ** [m]
(apply concat (vec m)))
(apply foo 1 2 (** {:c 3 :d 4}))
(apply apply [foo 1 2 (** {:c 3 :d 4})])
The problem with your apply* is that it's macro so it can't be used as an
fn.
David
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en