是否可以将扫描实现为换能器
Is it possible to implement scan as a transducer
我注意到 scan
在我查看的各种传感器库中缺失(例如 transducers-js)。是无法实施还是我遗漏了什么?
其实我可以回答我自己的问题。我试图以一种功能性的方式实现它,但我误解了传感器接口的使用方式。查看 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);
}
}
我注意到 scan
在我查看的各种传感器库中缺失(例如 transducers-js)。是无法实施还是我遗漏了什么?
其实我可以回答我自己的问题。我试图以一种功能性的方式实现它,但我误解了传感器接口的使用方式。查看 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);
}
}