gpt4 book ai didi

clojure - 带关键字参数的可变参数函数

转载 作者:行者123 更新时间:2023-12-04 05:39:27 25 4
gpt4 key购买 nike

我是 Clojure 的新手,我想知道是否有一种方法可以定义一个可以这样调用的函数:

(strange-adder 1 2 3 :strange true)

也就是说,可以接收可变数量的整数和关键字参数的函数。

我知道我可以这样定义一个带有关键字参数的函数:
(defn strange-adder
[a b c & {:keys [strange]}]
(println strange)
(+ a b c))

但是现在我的函数只能接收固定数量的整数。

有没有办法同时使用两种风格?

最佳答案

抱歉不行。
&解构运算符使用参数列表中它之后的所有内容,因此它无法以一种形式处理两组不同的可变数量解构组。

一种选择是将函数分解为几个参数。尽管这只有在您可以安排它时才有效,因此只有其中一个是可变参数(使用 & )。一种更通用且不太方便的解决方案是将整个参数列表视为一种可变参数形式,并手动从其开头选取数字。

user> (defn strange-adder
[& args]
(let [nums (take-while number? args)
opts (apply hash-map (drop-while number? args))
strange (:strange opts)]
(println strange)
(apply + nums)))
#'user/strange-adder
user> (strange-adder 1 2 3 4 :strange 4)
4
10

关于clojure - 带关键字参数的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com