什么是"单点多态",我怎样才能从中受益?

Gre*_*ret 67 functional-programming scala typeclass multimethod

Rick Hickey 在他的简单谈话中谈到了"按照多态性 "(约30:00进入视频).在同一个环境中,他还提到了Haskell的类型类和Clojure的多方法(和协议).

由于我对这些概念不太熟悉,因此我想了解它在实现简单性方面的用处.我对Scala中这个概念的任何示例或展示特别感兴趣.

xie*_*fei 33

您可以根据需要将多态性作为多态性进行点菜.

由于Clojure支持多种多态性策略,因此Clojure社区为单元素多态性这一术语感到自豪.他们之中有一些是:

  • 基于原型的多态性

  • 继承多态性

    这是Java使用的多态策略.Clojure通过代理支持此功能.在进行Java互操作时很有用.

  • 协议

    Clojure的协议是Haskell的TypeClass.

  • 多元法

    虽然协议基于第一个参数的类型提供多态分派,但是多方法更灵活,可以根据方法(任意)参数的任何函数进行调度.

单点多态性意味着"选择最适合您情况的多态性策略.它们都在您的工具箱中."

您可以TypeClass使用implicits在Scala中实现模式.如果您想要真实世界的示例,请阅读Scalaz源代码.Scala不支持语言级别的多方法,但我想在未来的2.10宏的帮助下可以实现.

至于好处,TypeClass和Multimethod等高级多态策略可以帮助解决表达式问题.

"我们的目标是通过的情况下,其中一个可以添加新的病例数据类型和新的功能,在数据类型来定义数据类型,而无需重新编译现有代码,并同时保持静态类型安全(例如,没有管型)".

顺便说一句,这个问题太大了,无法适应单个StackOverflow问题.我的建议是熟悉这些概念,然后你就会明白它们的用处.