gpt4 book ai didi

Clojure:不同类类型上的 defmulti

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

快速clojure问题,我认为这主要与语法有关。如何根据参数的特定类型签名调度多方法,例如:

(defn foo 
([String a String b] (println a b))
([Long a Long b] (println (+ a b))
([String a Long b] (println a (str b))))

我想将此扩展到任意内容,例如两个字符串后跟一个映射,映射后跟一个 double 数,两个 double 数后跟一个 IFn 等...

最佳答案

(defn class2 [x y]
[(class x) (class y)])

(defmulti foo class2)

(defmethod foo [String String] [a b]
(println a b))

(defmethod foo [Long Long] [a b]
(println (+ a b)))

来自 REPL:
user=> (foo "bar" "baz")
bar baz
nil
user=> (foo 1 2)
3
nil

您也可以考虑使用 type而不是 class ; type返回 :type元数据,委托(delegate)给 class如果没有。

另外, class2不必在顶层定义;通过 (fn [x y] ...)作为 defmulti 的调度函数也很好。

关于Clojure:不同类类型上的 defmulti,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16326943/

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