函子是类别之间保留结构的转换。这是一种将对象从一个类别映射到另一类别的对象,同时还保留对象之间的箭头的一种方法-将其视为类别同构。
Endofunctor是从一个类别回到同一类别的函子。
在JavaScript中,通常可以将Array.map链接起来,因为它总是返回Array。
someArray
.map(f1)
.map(f2)
.map(f3)
...
因此,在第一次考虑(2)时,我只是认为“好,因为Array是具有方法映射的特殊类型,并且它返回相同的类型,因此JavaScript数组必须是endofunctor。”
但是,考虑到(1),我认为“等等,这仅仅是所有函子的结构节省功能,而不仅限于endofunctor吗?”
换句话说,可以安全地说“如果它是可链接的,那是一个终结者”?还是无效的,因为可链接的图和内在是另一个概念?
最佳答案
是的,Array.map在javascript中是endofunctor,因为它通过使用object作为self返回object。注意,仅在JS中,因为它仅使用object
。
在C#等其他语言中,定义数组时,需要提供包含类型,它们之间的映射将成为函子,而不是endofunctor。
很容易识别。当且仅当类的函子总是返回与其自身相同的类时,此函子才是endofunctor。
因此,在MyClass
类中,
a: function(){
return this;
},
b: function(){
return new MyClass();
}
那些是终结者。
但是,说可链接的函子是endofunctor是不安全的。
只需想象两个类
class MyClassA()
和class MyClassB()
都具有一个共享相同名称的函子(这很常见)。在
MyClassA
中,changetype: function(){
return MyClassB;
}
反之亦然。
因此,一旦您可以编写类似
a = new MyClassA();
a.changetype().changetype().changetype()......
并没有麻烦。
因此,如果您找到一个可链接的函子,就无法确定它是否为endofunctor。因为共享同名函子在所有编程语言中都是非常典型的。
关于javascript - JavaScript Array.map通常是endofunctor还是仅仅是functor?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51219319/