是否可以将扫描作为转换器来实现

Is it possible to implement scan as a transducer

本文关键字:转换器 实现 扫描 是否      更新时间:2023-10-27

我注意到我查看的各种换能器库(例如换能器js)中缺少scan。是不可能实现还是我遗漏了什么?

实际上我可以回答自己的问题。我试图以一种功能性的方式来实现它,但我误解了转换器接口的使用方式。从transducer js的源代码来看,它们通常将状态保持在对象中,我可以用同样的方式实现scan

var Scan = function( agg, start, xf ){
    this.xf = xf;
    this.agg = agg;
    this.accum = start;
}
Scan.prototype.init = function(){
    return this.xf.init();
}
Scan.prototype.result = function(v) {
    return this.xf.result(v);
}
Scan.prototype.step = function( result, input ) {
    this.accum = this.agg( this.accum, input );
    return this.xf.step( result, this.accum );
}
var scan = function(agg, start) {
    return function (xf) {
        return new Scan(agg, start, xf);
    }
}