我只了解了 reducers 演讲中的几个部分,其中一个是数据结构可以实现IReducible
接口并能够本地转换,而不会变成LazySeq
第一个。
我希望在 clojurescript 中使用本机 javascript 数组和对象来利用它,但我不太确定从哪里开始。谁能提供一个如何做到这一点的例子?
我只了解了 reducers 演讲中的几个部分,其中一个是数据结构可以实现IReducible
接口并能够本地转换,而不会变成LazySeq
第一个。
我希望在 clojurescript 中使用本机 javascript 数组和对象来利用它,但我不太确定从哪里开始。谁能提供一个如何做到这一点的例子?
在 ClojureScript 中,相关协议被调用IReduce
并且已经在标准库中为数组实现。相关extend-type
表格在这里(链接到目前在 master 上的最新提交)。
也IKVReduce
使用 by reduce-kv
,以及clojure.core.reducers/reduce
在 map 参数的情况下。
您可以为您想以这种方式转换的本机对象提供一个包装器:
(defn wrap-as-reducible [obj]
(reify
IReduce
(-reduce [this f]
...)
(-reduce [this f init]
...)
IKVReduce
(-kv-reduce [this f init]
...)))
根据您的需要IReduce
实施其中一项或两项。IKVReduce
一般来说,直接为“本机对象”实现任一协议可能不是一个好主意,因为这相当于提供一个默认情况,这将使可简化性检查等变得毫无意义。