typescript - 这个成语是否有一个名称,可以根据先前的值和结果计算新结果?
问题描述
这个“Deriver”习语是否有标准名称(用 Typescript 编写,但不是特定于 Typescript):
type Derivation<T, R> = { value: T, result: R };
type Deriver<T, R> = (
previous: Derivation<T, R> | undefined,
value: T
) => R;
其中 aderiver
是一个函数,它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);
}
解决方案
我的第一个想法是这是一种记忆形式,只有一个记忆结果。previous.result
但是,如果是这种情况,您只需samePrefix
在找到时返回。
相反,看起来您正在做的是创建一种Reduce / Fold函数,该函数能够从先前状态中断的地方恢复。
此模式有许多不同的名称,因此由您决定您认为最适合您的情况的名称。以下是一些建议:
Reduction
/Reducer
FoldResult
/Folder
Aggregation
/Aggregator
推荐阅读
- android - 在打包选项中添加一些排除项后出现重复类问题
- javascript - TypeError:QUnit beforeEach 在 setTitle 上失败:无法读取未定义的属性“getElementById”
- c++ - grpc 和英特尔编译器
- angular - 为 Angular 12 构建开发模式
- python - 具有 Poly Kernel 的 SVM 模型
- flutter - 颤振捕捉变化
- javascript - Svelte - “'import' 和 'export' 可能只出现在顶层”错误
- google-bigquery - 加载位置 southamerica-west1 时出错:BigQuery 数据传输服务尚不支持位置:Southamerica-west1
- linux - 失败 cat 打开的 txt 文件
- kotlin - lambda 函数如何替换 Kotlin 中的对象实例?