Aplicando um mapa ao argumento de descanso de uma função

No Clojure, se eu tiver uma funçãof,

(defn f [& r] ... )

e eu tenho um seqargs com os argumentos que eu quero chamar f, eu posso facilmente usarAplique:

(apply f args)

Agora, digamos que eu tenha outra funçãog, que é projetado para aceitar qualquer um dos vários argumentos nomeados opcionais - isto é, onde o argumento de resto é desestruturado como um mapa:

(defn g [& {:keys [a b] :as m}] ... )

Eu normalmente ligaria para o g fazendo algo como

(g :a 1 :b 2)

mas se eu tiver um mapameu mapa com o valor {: a 1: b 2}, e eu quero "aplicar" g ao meu mapa - em outras palavras, obter algo que acabaria como a chamada acima, então eu naturalmente não poderia usar aplicar, uma vez que seria equivalente a

(g [:a 1] [:b 2])

Existe uma maneira legal de lidar com isso? Posso ter saído do caminho no meu design para acabar com isso? A melhor solução que posso encontrar seria

(apply g (flatten (seq my-map)))

mas eu certamente não gosto disso. Alguma melhor solução?

EDITAR: Uma ligeira melhoria para a solução sugerida pode ser

(apply g (mapcat seq my-map))

que pelo menos remove uma chamada de função, mas ainda pode não estar muito claro o que está acontecendo.

questionAnswers(4)

yourAnswerToTheQuestion