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