javascript - JavaScript Array.map 通常是一个 endofunctor 还是只是一个仿函数?

标签 javascript functor map-function

  1. 仿函数是类别之间的结构保留转换。这是一种将对象从一个类别映射到另一个类别的对象,同时保留对象之间的箭头的某种方式 - 将其视为类别同态。

  2. endofunctor 是从一个类别回到同一类别的仿函数。

在 JavaScript 中,Array.map 通常可以链接起来,因为它总是返回 Array。

someArray
.map(f1) 
.map(f2) 
.map(f3)
...

所以,第一次考虑(2)时,我只是想“好吧,由于 Array 是一种特殊类型,具有方法映射,并且它返回相同的类型,因此 JavaScript 数组必须是 endofunctor。”

但是,考虑到(1),我想“等等,这是否只是所有仿函数的结构保存功能,不限于endofunctor?”

换句话说,“如果它是可链接的,那么它就是一个endofunctor”是否安全?或者它是无效的,因为可链接映射和内切是另一个概念?

最佳答案

是的,Array.map是javascript中的endofunctor,因为它使用object作为self返回object。注意,仅在 JS 中,因为它仅使用 object

在其他语言中,比如 C#,当你定义一个数组时,你需要给出包含的类型,它们之间的映射成为仿函数而不是endofunctor。

很容易识别。当且仅当类的仿函数始终返回与其自身相同的类时,该仿函数才是一个endofunctor。

因此在类MyClass中,

a: function(){
   return this;
},
b: function(){
   return new MyClass();
}

那些是endofunctor。

但是,说可链式仿函数是 endofunctor 并不安全。

简单地想象两个类,class MyClassA()class MyClassB(),它们都有一个共享相同名称的仿函数(这很常见)。

MyClassA中,

changetype: function(){
   return MyClassB;
}

反之亦然。

所以,一旦你可以写出类似的东西

a = new MyClassA();
a.changetype().changetype().changetype()......

没有任何麻烦。

因此,如果您发现一个可链接的仿函数,您无法确定它是否是一个endofunctor。因为共享同名仿函数在所有编程语言中都是非常典型的。

关于javascript - JavaScript Array.map 通常是一个 endofunctor 还是只是一个仿函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51219319/

相关文章:

java - 有面向对象语言背景的java脚本学习起来很吃力(查看详情)

javascript - 如何在焦点和点击事件同时触发时仅运行一次函数

javascript - React-Router-Dom 中 1 个 Link 如何监听 2 个路径?

c++ - Functor 类在构造函数中工作

c++ - 错误 : passing const xxx as this argument of xxx discards qualifiers

两个列表的 Haskell 映射函数

javascript - 高性能 Javascript 固定滚动

c++ - 直接从 bind1st 和 bind2nd 调用返回仿函数

javascript - 为什么这个 JavaScript 映射不是无限循环?

python - 将 map 与查找和索引一起使用时 Python2 和 Python3 之间的区别