欢迎!请参阅关于页面,了解更多有关如何使用本网站的信息。
当前,当使用1元参数调用时,减法操作不提供转换器。
建议
第二个补丁建议了一个允许显式初始化值的变体:reductions-with
补丁: 0003-add-reductions-with.patch
预审: Alex Miller
评论由:[email protected] 提出
建议的补丁通过在没有参数的情况下调用函数来获取reductions的"init"值。我想要一个"reductions"转换器,它可以显式地表示"init",而不是依赖于空元(f)。
如果我没有记错的话,Rich 对支持不带init的reduce(类似于Common Lisp)表示了一些遗憾。我的理解是,对于新的Clojure代码,显式init是首选。
遗憾的是,为转换器提供一个显式init参数将与传统"无init"reductions(链接:f coll)冲突。在我自己的代码中,我为这个转换器使用了"accumulations"这个名称。另一个可能的名称可能是"reductions-with"。
评论由:pyr 提出
嗨,Steve:
我非常希望初始化值也能明确显示,不幸的是,除了在2-arity变体中测试第二个参数之外——这可能会更加令人困惑——没有任何方法可以仅使用“reductions”来实现这一点。
我喜欢提供“reductions-with”变体的想法,这个变体强制使用初始化值,如果需要的话,我也乐意增加这个补丁。
@Steve Miner 我添加了一个带reductions-with的变体。
我能做些什么来推动这个进程呢?@alexmiller 对代码本身有什么评论吗?
发表评论的人:alexmiller
我还没有机会查看它,抱歉。
@alexmiller,如果结果是得到clojure.spec,我会花一些时间来审查这个补丁的 :-)
为了测试,我建议您将transducer版本的结果与对sequence 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,它无缝工作,无需任何调整。