1

我只了解了 reducers 演讲中的几个部分,其中一个是数据结构可以实现IReducible接口并能够本地转换,而不会变成LazySeq第一个。

我希望在 clojurescript 中使用本机 javascript 数组和对象来利用它,但我不太确定从哪里开始。谁能提供一个如何做到这一点的例子?

4

1 回答 1

2

在 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

一般来说,直接为“本机对象”实现任一协议可能不是一个好主意,因为这相当于提供一个默认情况,这将使可简化性检查等变得毫无意义。

于 2013-07-05T04:33:27.877 回答