考虑具有以下签名的函数:
(defn make-widget [& {:keys [x y] :or {x 10 y 20}}]
...)
将映射传递给函数的最佳方法是什么,例如:
(make-widget {:x 100})
or
(make-widget {:y 200 :x 0})
我目前想到的是通过vec
, flatten
and apply
e.g.:
(apply make-widget (flatten (vec ({:x 100}))
我坚信有更好的方法来做到这一点。您能考虑一下吗?
我也想不出一种更优雅的方式,尽管在我看来应该有一种(比如特定于地图的变体)apply
).
Using flatten
不过,除了不够优雅之外,还有一些问题。如果你的地图的值是集合,flatten
也会递归地处理这些,所以事情可能会完全混乱。这个替代方案可以避免这个问题:
(apply make-widget (apply concat {:x 100}))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)