将高阶函数称为“模板”是不是正确?

Posted

技术标签:

【中文标题】将高阶函数称为“模板”是不是正确?【英文标题】:Is it correct to refer to a higher-order function as a "template"?将高阶函数称为“模板”是否正确? 【发布时间】:2021-04-09 05:52:04 【问题描述】:

最小的例子:假设我有高阶函数

const my_fn = (a) => (b) => a + b

那个,当这样调用时:

my_fn(42)

返回函数(b) => 42 + b

my_fn 称为“模板函数”是否正确?

我知道,在 C++ 等语言中,“模板”一词具有非常特定的技术含义。 但是在 javascript 中,(AFAIK)没有像 C++ 那样的语法内置模板。

我不想滥用术语。

将JS中的高阶函数称为模板函数是否正确,反之亦然?

(相关的可选问题:在 JS 中熟练使用高阶函数和用这种语言进行“泛型编程”有区别吗?)

【问题讨论】:

我不认为模板这个词适用于 JS 的上下文,所以我不希望在 JS 对话中使用这个词。 【参考方案1】:

我不会将其称为“模板”函数,尽管我可能会将此函数称为“函数工厂”。对我来说,像 C++ 这样的语言中的“模板”一词意味着将一个函数应用于一系列不同数据类型的特定目标。

像您给出的示例这样的函数在“泛型编程”方面并没有真正实现任何新功能,因为它并非旨在生成对不同类型值进行操作的函数。 Javascript 对类型并不严格,因此您可以将任何类型的值传递给您的函数,并且该语言将尽力使用它。你不需要做任何额外的事情来使函数适用于不同类型的对象;除非程序员添加明确的类型检查逻辑,否则每个函数都接受各种对象。

【讨论】:

那么说每个模板函数都是函数工厂是否正确(因为它为每个给定的类型组合创建一个新函数)但并非所有函数工厂都是模板(因为不是所有函数工厂的目标是使单个函数适用于多种类型)? 当然,我认为这是有道理的。

以上是关于将高阶函数称为“模板”是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

python 高阶函数都有哪些

python3--高阶函数

JavaScript 高阶函数

day3-高阶函数,装饰体

一文读懂Python 高阶函数

Scala 高阶函数