在他的谈话 简单易行,里克希基谈论“ 点菜时的多态性”(约30:00进入视频)。在同一上下文中,他还提到了 Haskell 的 类型类别和 Clojure 的 多元化方法(以及协议)。
由于我不是很熟悉这些概念,我想了解它的有用性时,试图实现 简单。我特别感兴趣的任何例子或展示在 斯卡拉这个概念。
你可以把 点菜时的多态性当作 随需应变的多态性。
Clojure 社区为术语 点菜时的多态性感到自豪,因为 Clojure 支持多种多态策略。其中一些是:
基于原型的多态性
继承多态性
这是 Java.Clojure 使用的多态策略,通过代理支持。
规定
Clojure 的协议是 Haskell 的 TypeClass。
多方法
虽然协议根据第一个参数的类型提供多态分派,但是多方法更加灵活,可以根据方法的(任何)参数的任何函数进行分派。
多态性 a la carte 意思是“选择最适合您的情况的任何多态策略,它们都在您的工具箱中。”
您可以使用隐式实现 Scala 中的 TypeClass模式。如果你想要真实世界的例子,请阅读 斯卡拉兹的消息来源。Scala 在语言层面上不支持多方法,但是我想在即将到来的2.10宏的帮助下,这是可能的。
TypeClass
至于好处,TypeClass 和 Multimethod 等高级多态策略可以帮助解决 表情问题问题。
我们的目标是通过案例定义一个数据类型,在这里我们可以在数据类型上添加新的案例和新的函数,而不需要重新编译现有的代码,同时保持静态类型的安全性(例如,不需要强制转换)。
顺便说一句,这个问题太大了,不能放进一个 StackOverflow 问题中。我的建议是熟悉这些概念,然后你就会明白它们的用处。