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创建的reducer直接调用-Reduce(来自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}}在仓库中,但这个补丁不能应用了。能否把补丁rebase到master分支上。谢谢。如果您也想尝试基准测试,请按照以下步骤安装JS引擎 - http://github.com/clojure/clojurescript/wiki/Running-the-tests。然后您也可以在命令行中运行基准测试。我看到没有reducers的基准测试,我会添加一些。

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