此“ Deriver”惯用语是否有标准名称(用Typescript编写,但不是Typescript专用):
type Derivation<T, R> = { value: T, result: R };
type Deriver<T, R> = (
previous: Derivation<T, R> | undefined,
value: T
) => R;
其中deriver
是使用先前的值/结果作为提示来潜在地优化新计算的函数来计算新值R
的函数吗?
以下是此类功能的示例:
function complexCalculation(a: number, b: number): number {
// assume that this function is expensive
return a + b;
}
function calcDeriver(
previous: Derivation<number[], number> | undefined,
value: number[]
): number {
if (previous) {
if (previous.value === value) {
return previous.result;
}
let samePrefix = true;
if (previous.value.length < value.length) {
for (let i = 0; i < previous.value.length; i++) {
if (previous.value[i] !== value[i]) {
samePrefix = false;
break;
}
}
}
if (samePrefix) {
return value
.slice(previous.value.length)
.reduce(complexCalculation, previous.result);
}
}
return value.reduce(complexCalculation, 0);
}
答案 0 :(得分:1)
我首先想到的是这是Memoization的一种形式,只有一个记忆的结果。但是,在这种情况下,如果找到了previous.result
,您只需返回samePrefix
。
相反,您正在执行的操作似乎是创建一种Reduce / Fold函数,该函数能够从先前状态中断的地方继续工作。
此模式有许多不同的名称,因此由您自己决定最适合您的情况的模式。这里有一些建议:
Reduction
/ Reducer
FoldResult
/ Folder
Aggregation
/ Aggregator