2024年Clojure调查问卷中分享你的想法!

欢迎!请参阅关于页面,了解有关此功能的一些更多信息。

0投票
ClojureScript
  1. 目前这不起作用

(->> nil

 (r/map identity)
 (r/reduce + 0))
 ; org.mozilla.javascript.JavaScriptException: Error: No protocol method IReduce.-reduce defined for type null

这是因为由 r/reducer 或 r/folder 创建的reducers直接调用了 -reduce (of IReduce)。因此,它们绕过了函数 r/reduce 中的 nil 特殊情况。

  1. 对于类型为数组的数据集合,存在一个完全类似的问题。

  2. 修正 CLJS-700 错误地将 coll-fold 定义为 cljs.core/IPersistentVector 类型。这应该是 cljs.core/PersistentVector。在 ClojureScript 中不存在 IPersistentVector 协议。()

我将很快附上一个补丁,通过实现 nil 和数组类型的 IReduce 解决上述所有问题。该补丁还包括单元测试。

18 答案

0投票

评论者:dnolen

是的,但既然我们现在有了新的逻辑,我们至少可以通过在其他类型上测试以防止回归来测试。

0投票

评论者:dnolen

好吧,我尝试应用这个补丁并在仓库中运行 {{./script/benchmarks}},但补丁现在无法应用。我们能在master上重放这个补丁吗?谢谢。如果你们也想测试一下基准测试,请按照以下说明安装JS引擎 - http://github.com/clojure/clojurescript/wiki/Running-the-tests。然后你们也可以在命令行运行基准测试。我没有看到任何reducers基准测试,我会添加一些。

0投票
参考资料:https://clojure.atlassian.net/browse/CLJS-736(由jdevuyst报告)
...