protocols - 如何在 Clojurescript 中使用 deftype 实现关联结构

标签 protocols clojurescript

我想提供基于 Javascript Typed Arrays 的向量的 Clojurescript 实现,它支持 assoc、replace 等。我想我想这样做(也许有更好的方法,或者也许有人已经做到了?)。想必我会使用 deftype,但是我应该为哪些协议(protocol)提供“具体内容”?

最佳答案

让我们看看内置向量实现了什么。可以查看源码here, on github .

看起来是:ObjectIWithMetaIMetaIStackICollection >、IEmptyableCollectionISequentialIEquivIHashISeqable ICountedIIndexedILookupIMapEntryIAssociativeIVectorIReduceIKVReduceIFnIEditableCollectionIReversible

数量很多,但由于每个方法都定义一个或最多两个方法,所以工作量并不大。另外,您可以保留其中一些未实现,例如仅用于 transient 的 IEditableCollection 或用于新 reducer 函数的 IReduce

您甚至不必让新数据结构完全像内置 Vector 一样工作。例如,您可以让它实现所有顺序的东西,而不用担心 map 的东西,尽管当然它会比普通的 Vector 方便。

关于protocols - 如何在 Clojurescript 中使用 deftype 实现关联结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14116299/

相关文章:

clojure - 使用 core.async 延迟显示 http 请求微调器的惯用方法

javascript - 如何使用 ^ :export, 标记使用 `reify` 创建的方法,以便 Closure 编译器不重命名它们?

swift - 数组中具有关联类型的协议(protocol) - 替代解决方案

protocols - 使用 Java 的 SMB 连接

protocols - smb协议(protocol)漏洞解决方案

java - 尝试编译 clojurescript 时出错

ios - 如何让所有子类都必须遵守协议(protocol)?

objective-c - Objective - C,使用 NSDecimalNumberHandler 和 NSDecimalNumberBehaviors 协议(protocol)

javascript - 从 ClojureScript 调用 JavaScript 对象属性作为构造函数

clojurescript - 在 re-frame 应用程序中使用 rc-animate 对 antizer 表进行动画处理