有状态转换器预计会在调用“完整”元数(即[([result input] ))之前根据需要多次调用“步骤”元数(即([result] ))来刷新其状态。
我的问题是reduced这里如何处理提前终止(使用 )。
在https://clojure.org/reference/transducers#_early_termination \nit 说
\n\n\n在完成步骤中,具有缩减状态的传感器应在调用嵌套的 Transformer\xe2\x80\x99s 完成函数之前刷新状态,除非它之前已经看到来自嵌套步骤的缩减值,在这种情况下,应丢弃挂起状态。
\n
但“以前见过”是什么意思?
\n对上述引用有三种可能的解释:\n如果嵌套转换器的“步骤”数量已返回一个reduced值,则“完整”步骤应该
看看partition-by它的实现,似乎第一个选项适用:
([result]\n (let [result (if (.isEmpty a)\n result\n (let [v (vec (.toArray a))]\n ;;clear first!\n (.clear a)\n (unreduced (rf result v))))]\n (rf result)))\nRun Code Online (Sandbox Code Playgroud)\n在将此未减少的值传递给嵌套变换的“完整”数量之前,这还会从使用剩余状态调用嵌套变换的“步骤”数量的结果中删除“减少”。
\n那么问题是,如果我有一个有状态的减速器,在其完成步骤中会多次调用其嵌套转换的“步骤”数量,那么如果它在reduced完成步骤中看到一个值,它应该如何反应?
尝试将上面的引用和代码结合起来,我认为它应该停止调用“step”arity并直接调用具有unreduced类似值的“complete”arity partition-by。
但是,然后查看代码cat …