Hi all, I've got a couple questions regarding rest parameters.
1) In function params, is there a way to destructure the rest argument as a map and bind it to a name at once in the function signature? Below is an example. f1 takes opts parameter. Now I have f2 with similar signature (but different default for b) and it may decide to pass the opts argument to f1, but I need to call flatten & seq to pass it. Another way is with f3 where I destructure in let, but my fn signature no longer showed me what I could have in opts. Is there a way to combine f2 & f3, say like f4? It seems like if I destructure a rest argument, I cannot bind a name to it anymore? (let [f1 (fn [a & {:keys [b] :or {b 'f1-def} :as opts}] [a b opts]) f2 (fn [a & {:keys [b] :or {b 'f2-def} :as opts}] (apply f1 a (flatten (seq opts)))) f3 (fn [a & opts] (let [{:keys [b] :or {b 'f3-def}} opts] (apply f1 a opts))) #_(f4 (fn [a & {:keys [b] :or {b 'f4-def}} opts] (apply f1 a opts)))] (println (f2 1 :b 'hi :c 'f2)) (println (f2 1)) (println (f3 2 :b 'hi :c 'f3)) (println (f3 2))) This gives: [1 hi {:c f2, :b hi}] [1 f1-def nil] [2 hi {:c f3, :b hi}] [2 f1-def nil] 2) My f2 & f3 above is incorrect (wrong default is applied). Calling (f2 1) gave [1 f1-def nil] instead of [1 f2-def nil]. So does this mean the opts binding is applied before the default is assoced-in? What's the idiomatic & correct way to handle this? Thanks all in advance, Sindu -- 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/d/optout.