欢迎!请在关于页面查看有关如何使用此功能的更多信息。
当使用1个参数调用时,reductions当前不提供转换器。
建议
第二个补丁建议了一个允许显式初始化值的变体:reductions-with
补丁: 0003-add-reductions-with.patch
由: Alex Miller
评论者:[email protected]
建议的补丁通过使用不带参数的函数来调用 reductions 获取 "init" 值。我希望有一个接受显式 "init" 的 "reductions" 转换器,而不是依赖于一个零参数(f)。
如果我记得没错,Rich 对支持不带有初始化减量(类似于 Common Lisp)表示了一些遗憾。我的理解是有显式初始化对新 Clojure 代码来说是首选。
遗憾的是,对于转换器的显式初始化参数会与标准的 "no-init" reductions(链接:f coll)发生冲突。在我的代码中,我已经使用了 "accumulations" 这个名字来命名这个转换器。另一个可能的名字可能是 "reductions-with"。
评论者:pyr
嗨,Steve,
我非常希望初始化值也能明确,但遗憾的是,即使测试 2-ary 变体的第二个参数——这可能会更加令人困惑——也无法用普通的 "reductions" 来做这件事。
我喜欢提供 "reductions-with" 变体的想法,这个变体可以强制使用初始化值。如果需要,我很高兴为补丁添加这个功能。
@Steve Miner 我添加了一个包含 reductions-with 的变体。
我能做些什么来推动这个项目的进展吗?@alexmiller 对代码本身有何评论?
评论者:alexmiller
还没来得及看,抱歉。
@alexmiller,如果结果是有助于 clojure.spec,我会花点时间来审查一下 :-)
对于测试,我建议您比较 transducer 版本的输出与相似调用序列 reductions 的输出。例如:
`
(is (= (reductions + 3 (range 20)) (sequence (reductions-with + 3) (range 20)))
我希望看到这种一致性。0002 补丁没有用与当前 Clojure reductions 相同的方式处理 init。
@alexmiller 我再推一把,至少对补丁和 reductions-with 变体有所了解,因为 1.9 似乎已接近发布。
对不起,我不知道我何时能腾出时间,也不知道它是否会被考虑 进1.9版本。我不知道它会不会被考虑进去,只是...我不确定。
@alexmiller,感谢你的迅速回复。我正在确保自己等待反馈时能快速行动。干杯!
@alexmiller,有没有对这个能被采纳或者我如何修改/完善代码的任何进一步见解?
有机会我会试用一下。
我认为我更喜欢使用 reductions-with 的方法,而不是使用 reductions 进行重载。
你这里有两个对 @state 的解引用 - 考虑到我们所做的假设,这并不是错误的,但我认为在 let 中只看到一个 state 的解引用,风格上会更加可取。
嗨 @alexmiller,只使用 reductions-with 会更有意义,并且具有一致的行为。我已经添加了第三个补丁,根据你的建议实现了它,避免了双重解引用。
评论者:sickill
顺便提一下,我已经在我的 ClojureScript 项目中使用 Pierre-Yves 的第三个补丁中的 reductions-with,它直接运行无需任何调整。