gpt4 book ai didi

clojure - 如何在 clojure 中编写可变参数 defmulti/defmethod

转载 作者:行者123 更新时间:2023-12-05 01:02:31 25 4
gpt4 key购买 nike

我有一个 defmulti/defmethod 组,它采用像这样的成对参数......

(defmulti foo "some explanation" (fn [arg1 arg2] (mapv class [arg1 arg2])))
(defmethod foo [N P] (->L 1 2 3))
(defmethod foo [L P] (->N 5))
(defmethod foo [P N] (->L 6 7 8))
...

以您可能期望的方式调用它们。
(foo (->N 9) (->P 9))

我想要的是用 2 个以上的参数调用 'foo'。
我知道如何使用函数来做到这一点,我想我可以使用一些包装函数将 args 拆分成对,然后组合结果(或仅使用“reduce”),但这似乎是错误的。

那么我的问题是...
在 clojure 中定义可变参数多功能的惯用方法是什么?

最佳答案

defmulti 没有错调度函数和 defmethod body 可变参数签名,这是完全惯用的:

(defmulti bar (fn [x & y] (class x)))
(defmethod bar String [x & y] (str "string: " (count y)))
(defmethod bar Number [x & y] (str "number: " (count y)))

(bar "x" 1 2 3) ;=> "string: 3"
(bar 1 2 3) ;=> "number: 2"

关于clojure - 如何在 clojure 中编写可变参数 defmulti/defmethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26130263/

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