TypeScript/React 扫描运算符在当前值 = 函数接口的情况下如何工作?
TypeScript/React how does scan operator work where currentvalue = function interface?
我有一个带有以下参数的扫描运算符:
.scan(function (acc:Message[], x: (msg: Message[]) => Message[]){ return x(acc); }, initialMessages)
我的问题是 return x(acc)
returns 实际上是什么?在这种特殊情况下,累加器 function
是如何工作的?
我对 TypeScript 和 lambda 表达式还很陌生,所以非常感谢任何帮助。
在这种情况下,x(acc)
的类型将是 Message[]
。您可以从第二个参数 x
的签名中看出这一点,其中 returns Message[]
.
通常 scan()
接受带有累加器和值的函数 (acc, val) => ...
。并发出返回值。在这种情况下,进入扫描运算符的发射值 val
是一个闭包。这有点不寻常,但非常好。一个输出
的例子
[ 1, 2, 3 ]
[ 3, 4, 5 ]
[ 4, 5, 6 ]
...将是:
import { Observable } from 'rxjs/Rx';
type Message = number;
function scanFn(acc: Message[], x: (msg: Message[]) => Message[]): Message[] {
return x(acc);
}
function mapFn(val: Message): (msg: Message[]) => Message[] {
return x => x.map((y, i) => val + i);
}
Observable.from([1, 3, 4])
.map(mapFn)
.scan(scanFn, [1, 2, 3])
.subscribe(console.log);
我有一个带有以下参数的扫描运算符:
.scan(function (acc:Message[], x: (msg: Message[]) => Message[]){ return x(acc); }, initialMessages)
我的问题是 return x(acc)
returns 实际上是什么?在这种特殊情况下,累加器 function
是如何工作的?
我对 TypeScript 和 lambda 表达式还很陌生,所以非常感谢任何帮助。
在这种情况下,x(acc)
的类型将是 Message[]
。您可以从第二个参数 x
的签名中看出这一点,其中 returns Message[]
.
通常 scan()
接受带有累加器和值的函数 (acc, val) => ...
。并发出返回值。在这种情况下,进入扫描运算符的发射值 val
是一个闭包。这有点不寻常,但非常好。一个输出
[ 1, 2, 3 ]
[ 3, 4, 5 ]
[ 4, 5, 6 ]
...将是:
import { Observable } from 'rxjs/Rx';
type Message = number;
function scanFn(acc: Message[], x: (msg: Message[]) => Message[]): Message[] {
return x(acc);
}
function mapFn(val: Message): (msg: Message[]) => Message[] {
return x => x.map((y, i) => val + i);
}
Observable.from([1, 3, 4])
.map(mapFn)
.scan(scanFn, [1, 2, 3])
.subscribe(console.log);