2015-02-14 5 views

ответ

1

На самом деле я могу ответить на свой вопрос. Я пытался реализовать его функционально, и я неправильно понял, как используется интерфейс преобразователя. Рассматривая исходный код от преобразователей-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); 
    } 
}