什么是“点菜式多态性”? 我如何从中受益?

在他的谈话 简单易行,里克希基谈论“ 点菜时的多态性”(约30:00进入视频)。在同一上下文中,他还提到了 Haskell 的 类型类别和 Clojure 的 多元化方法(以及协议)。

由于我不是很熟悉这些概念,我想了解它的有用性时,试图实现 简单。我特别感兴趣的任何例子或展示在 斯卡拉这个概念。

5955 次浏览

你可以把 点菜时的多态性当作 随需应变的多态性

Clojure 社区为术语 点菜时的多态性感到自豪,因为 Clojure 支持多种多态策略。其中一些是:

  • 基于原型的多态性

  • 继承多态性

    这是 Java.Clojure 使用的多态策略,通过代理支持。

  • 规定

    Clojure 的协议是 Haskell 的 TypeClass。

  • 多方法

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

多态性 a la carte 意思是“选择最适合您的情况的任何多态策略,它们都在您的工具箱中。”

您可以使用隐式实现 Scala 中的 TypeClass模式。如果你想要真实世界的例子,请阅读 斯卡拉兹的消息来源。Scala 在语言层面上不支持多方法,但是我想在即将到来的2.10宏的帮助下,这是可能的。

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

我们的目标是通过案例定义一个数据类型,在这里我们可以在数据类型上添加新的案例和新的函数,而不需要重新编译现有的代码,同时保持静态类型的安全性(例如,不需要强制转换)。

顺便说一句,这个问题太大了,不能放进一个 StackOverflow 问题中。我的建议是熟悉这些概念,然后你就会明白它们的用处。