gpt4 book ai didi

arrays - 将 Clojure 协议(protocol)扩展为原始数组

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

我想扩展一个 Clojure 协议(protocol)来处理 Java 原始数组。

(defprotocol PVectorisable
(to-vector [a]))

(extend-protocol PVectorisable
??????
(to-vector [coll]
(Vectorz/create ^doubles coll))
java.util.List
... other implementations......)

这可能吗,如果可以,上面的扩展协议(protocol)定义中需要做什么(代替“??????”)?

最佳答案

最简单的解决方案可能是通过反射以编程方式获取类。

(defprotocol do-a-thing
(print-thing [thing]))

(extend-protocol do-a-thing
(class (float-array 0))
(print-thing [_]
(println "it's a float array")))

Java 的数组有一些奇怪的名字。例如,浮点数组是 [F .如果你尝试直接在 REPL 中使用它,它会阻塞在不匹配的 [ 上。 .但是,您仍然可以将此名称与 Class/forName 一起使用。 .
(defprotocol do-another-thing
(print-another-thing [thing]))

(extend-protocol do-another-thing
(Class/forName "[F")
(print-another-thing [_]
(println "it's still a float array")))

This article更详细地介绍了数组类。

关于arrays - 将 Clojure 协议(protocol)扩展为原始数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13924842/

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