You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure中如何将可变参数函数的剩余参数传递给其他函数

Clojure 可变参数更新 map 集合的惯用写法

直接将 apply 作用于 update 函数即可实现参数的自动展开,无需额外包裹匿名函数:

(defn my-update [what item & items]
  (apply update what :desired-key conj item items))

原理说明

  • apply 会将传入的最后一个序列(此处为 items)的元素展开,和前面的所有参数拼接为完整的参数列表传递给 update
  • 刚好匹配 update 原生的多参数签名 [m k f x y & more],conj 会接收到所有独立的待添加元素,而非打包的序列
  • 性能和可读性都优于包裹匿名函数的写法

如果需要适配任意键的通用更新,可以将键作为参数传入:

(defn my-update [what target-key item & items]
  (apply update what target-key conj item items))

原有写法问题说明

你最初的写法之所以不符合预期,是因为直接传入的 items 会作为单个序列参数传递给 conj,最终会把整个序列作为单个元素添加到 vector 中,而非逐个添加序列内的元素。

内容的提问来源于stack exchange,提问作者Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:24:03