我正在研究关于Sanctuary.js的文档。我也一直在学习Haskell,并在FP概念方面做了一些斗争。
@@type的属性)和(c)类型所需实现的任何方法的对象。除了没有任何状态的类型值之外,FP类型值和普通的面向对象对象之间有什么区别?“幻想-土地规范”给出了标准的实现类型,包括它们上的方法。一些(全部?)这些方法服从代数定律,就像Functors需要一个服从恒等式和合成律的map方法。我是否可以自由地创建我的用户类型,并要求它们上我喜欢的方法?这些方法是否必须符合任何代数设计原则或规律?如果不是,我肯定会觉得OO设计(对象中的负状态)!我不知道我错过了什么。类型类似于接口吗?父对象?null和undefined以外的每个值。它说"Object是关闭的,但是Object.create(null)生成一个值,它支持属性访问,但它不是对象类型的成员“。但是打印一个用null创建的对象会显示{},它的typeof是object。在我看来,似乎是对象类型的成员。我误会什么了?为什么Accessible的psuedo类型是必要的?伪类型和常规类型之间有什么区别呢?例如,Integer被称为伪类,但它似乎是Number类对我的扩展。发布于 2017-11-24 13:32:14
除了没有任何状态的类型值之外,FP类型值和普通的面向对象对象之间有什么区别?
这不仅是因为它们没有任何可变状态,而且它们也不像OOP实例那样携带任何值。它们更像是OOP对象的类。它们是只有静态方法的JS对象,或者是不同的:包含普通函数的记录。
我是否可以自由地创建我的用户类型,并要求它们上我喜欢的方法?
是!
这些方法是否必须符合任何代数设计原则或规律?
不是的。是。你可以写不合法的方法,没有什么能阻止你。即使在Haskell,这些法律也不是由编译器/打字机强制执行的。(通常)。
他们甚至可以工作。但它们打破了其他开发人员的假设,打破了这些开发人员编写的代码赖以工作的假设。
类型类似于接口吗?
是的,这可能是个很好的比喻。或者至少,由类型对象实例化的类型类 (JavaScript中必需的具体化)是由类型实现的接口。
打印使用null创建的对象显示为
{},其typeof是对象。在我看来,这是一个对象类型的成员。我误会什么了?
“instanceof”可能在这里指的是Object.create(null) instanceof Object,而Object.create(null) instanceof Object是false,因为它不是从Object.prototype继承的。其他可访问但非Object对象可能是来自其他领域的值,如iframe环境。
https://stackoverflow.com/questions/47473763
复制相似问题