What about merging with a default map?
(defn my-function [params]
(let [params (merge {:my-key 5} params)]
(str "my-key value is " (:my-key params))))
Well, I need to do something more "clever" because I am passing the whole
> map to another function which does validation on the key-value pairs.
> So....i guess I need to append those default associations to the original
> map myself...
>
> Something like...
>
> *(defn my-function [{:keys [my-key] :or {my-key 5} :as params}]
>> ** (let [params (if (nil? (:my-key params)) (assoc params :my-key
>> my-key) params)
>> ** (str "my-key value is " (:my-key params)))*
>
> *
> *
> *...but it's too damn ugly, need to think about it a bit more.*
>
> On Friday, May 3, 2013 10:22:59 PM UTC+3, Sean Corfield wrote:
>>
>> The :as key binds the entire _original_ map.
>>
>> The :or defaults apply only to the bound variables extracted from the
>> map.
>>
>> It caught me out when I first used map destructuring but I soon got used
>> to it.
>>
>>
>> On Fri, May 3, 2013 at 12:08 PM, Ryan <[email protected]> wrote:
>> > Thanks Anthony for your reply but I was already aware of that. I was
>> hoping
>> > for some solution which would took care of the binding if :as was
>> provided
>> > and would append the key-value to the :as parameter.
>> >
>> > I probably need to do that myself....but you never know, someone else
>> might
>> > have done it and has an elegant proposal :)
>> >
>> > Ryan
>> >
>> >
>> > On Friday, May 3, 2013 10:04:41 PM UTC+3, Anthony Rosequist wrote:
>> >>
>> >> The value of :my-key (or the default, if :my-key doesn't exist) is
>> being
>> >> bound to the symbol my-key, so all you need to do is this:
>> >>
>> >>> (defn my-function [{:keys [my-key] :or {my-key 5} :as params}]
>> >>> (str "my-key value is " my-key))
>> >>
>> >>
>> >> On Friday, May 3, 2013 1:52:46 PM UTC-5, Ryan wrote:
>> >>>
>> >>> Hello all,
>> >>>
>> >>> I have a question regarding the default values when destructuring
>> with
>> >>> :keys
>> >>>
>> >>> Let's assume that we have the following function:
>> >>>
>> >>>> (defn my-function [{:keys [my-key] :or {my-key 5} :as params}]
>> >>>> (str "my-key value is " (:my-key params)))
>> >>>
>> >>>
>> >>> A few test runs:
>> >>>
>> >>>>
>> >>>> user=> (my-function {:my-key 1})
>> >>>> "my-key value is 1"
>> >>>
>> >>>
>> >>> Works as expected.
>> >>>
>> >>>> user=> (my-function {:another-key "hello"})
>> >>>> "my-key value is "
>> >>>
>> >>>
>> >>> As you can see here, my-key value is nil even thought I have a
>> default
>> >>> value of 5.
>> >>> From the above observation, it seems that :as will not fill in the
>> >>> missing keys with the default values if those are provided as in my
>> case.
>> >>>
>> >>> Does anyone have a solution for this?
>> >>>
>> >>> Thank you for your time
>> >>>
>> >>> Ryan
>> >
>> > --
>> > --
>> > 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
>> > ---
>> > 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 [email protected].
>> > For more options, visit https://groups.google.com/groups/opt_out.
>> >
>> >
>>
>>
>>
>> --
>> Sean A Corfield -- (904) 302-SEAN
>> An Architect's View -- http://corfield.org/
>> World Singles, LLC. -- http://worldsingles.com/
>>
>> "Perfection is the enemy of the good."
>> -- Gustave Flaubert, French realist novelist (1821-1880)
>>
>
--
--
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
---
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.