我只理解了reducers talk中的几个部分,一个是数据结构可以实现IReducible
接口并且能够本地转换,而不是首先转换为LazySeq
我希望在本机javascript数组和对象的clojurescript中利用它,但我不太清楚从哪里开始。任何人都可以举例说明如何做到这一点吗?
答案 0 :(得分:2)
在ClojureScript中,相关协议称为IReduce
,并且已针对标准库中的数组实现。相关的extend-type
表单是here(链接到目前最新的master提交)。
IKVReduce
使用reduce-kv
,地图参数也使用clojure.core.reducers/reduce
。
您可以为本机对象提供一个包装器,您希望以这种方式进行转换:
(defn wrap-as-reducible [obj]
(reify
IReduce
(-reduce [this f]
...)
(-reduce [this f init]
...)
IKVReduce
(-kv-reduce [this f init]
...)))
根据您的需要实施IReduce
和IKVReduce
中的一个或两个。
通常直接为“本机对象”实现任一协议可能不是一个好主意,因为这相当于提供了一个默认情况,这将使得对可还原性的检查毫无意义等。