如何将可变参数函数的其余参数传递给另一个函数?

胡说

我想编写一个函数,它只是用新值更新地图中的向量,但可以采用任意数量的参数,但至少可以采用一个。

这是示例:

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

不幸的是,这行不通。尽管它update确实有一个带有多个值的签名(如[m k f x y]),但所有剩余的参数都my-update将被连接到一个序列中,该序列将conj作为一个参数传递给

相反,conjapply匿名函数包装确实有效,但看起来不那么优雅:

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

编写这样一个函数的惯用方式是my-update什么?

您可以简单地在之前插入applyupdate这将update使用后面的参数调用函数,除了最后一个参数应该是一个序列,其元素成为调用中的剩余参数:

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

(my-update {:desired-key [0]} 1 2 3 4)
;; => {:desired-key [0 1 2 3 4]}

(my-update {:desired-key [0]})
;; Exception: Wrong number of args (1) passed to: my-update

这样,您可以保留函数参数列表[what item & items],以明确至少需要提供一项。

通常,调用(apply f a b c ... [x y z ...])将评估为与(f a b c ... x y z ...).

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将可变函数参数作为参数传递给另一个函数?

如何将可变参数传递给另一个函数

PHP如何将可变长度函数参数传递给另一个可变长度函数?

将可变参数模板函数参数传递给另一个函数

如何在Go中将可变参数从一个函数传递给另一个函数

将可变函数参数传递给 PHP 中的另一个函数

如何在Golang中将可变长参数作为参数传递给另一个函数?

此函数如何将参数传递给另一个内部函数参数

如何将参数传递给作为另一个函数参数的函数

将可选函数(和可选参数)传递给 Python 中的另一个函数?

如何将tanh函数作为参数传递给另一个函数?

如何将函数作为参数传递给 Javascript 中的另一个函数?

Kotlin:如何将函数作为参数传递给另一个函数?

如何将函数作为参数传递给另一个函数?

如何将泛型函数作为参数传递给另一个函数?

如何将带有参数的函数传递给另一个函数

如何将命名参数传递给另一个函数需要的函数?

如何在C ++中将可变参数函数与另一个函数消除歧义

使用模板可变参数将多个参数传递给另一个函数

如何将参数传递给以字符串形式传递给另一个函数的函数?

如何将&rest参数传递给emacs lisp中的另一个函数?

如何将函数的所有参数传递给另一个命令?

如何将参数4..99传递给另一个函数

如何将回调作为参数传递给另一个函数

如何将一个函数作为参数传递给另一个函数?

如何将lambda从一个函数传递给另一个函数作为参数?

R-如何将一个函数作为参数传递给另一个函数?

在shell中的另一个函数内部调用参数时如何将参数传递给函数

如何将带有参数作为参数的函数传递给Python中的另一个函数?