【发布时间】:2021-04-28 13:01:04
【问题描述】:
我想将 hashmap 的所有 key-val 对传递给一个函数,而不是整个 hashmap。
所以我有一个我无法更改的函数,看起来像这样:
(defn foo [a b c & {:keys [x y z]}]
(println x y z))
我有一个哈希图,其中包含可变数量的键和值。假设一个实例是:
(def bar {:d 1
:e 2
:x "x"
:y "y"})
如何在不传递整个哈希图的情况下将所有键值对传入 foo? 我想做
(foo "a" "b" "c"
:d 1
:e 2
:x "x"
:y "y")
【问题讨论】:
-
我认为最后一个代码块有错字,我认为应该是
(foo "a" "b" "c" :x "x" :y "y") -
你可以用
concat构造一个参数序列,然后apply你的函数foo给它:(apply foo (apply concat "a" "b" "c" bar)) -
@A.Webb 天哪,这行得通!太棒了,谢谢!
-
@SteffanWestcott 否定。 foo 中的 & {:keys [x y z]} 应该忽略 :d 和 :e。我只是想展示我将使用的地图的可变性,但感谢您的检查!
-
这是最近添加到 clojure.core 的内容,看起来很相关:clojure.org/news/2021/03/18/apis-serving-people-and-programs