在他的演讲Simple Made Easy中,Rick Hickey 谈到了“点菜多态”(大约 30:00 进入视频)。在相同的上下文中,他还提到了 Haskell 的类型类和 Clojure 的多方法(和协议)。
由于我对这些概念不是很熟悉,因此我想了解它在尝试实现简单性时的用处。我对Scala中有关此概念的任何示例或展示特别感兴趣。
在他的演讲Simple Made Easy中,Rick Hickey 谈到了“点菜多态”(大约 30:00 进入视频)。在相同的上下文中,他还提到了 Haskell 的类型类和 Clojure 的多方法(和协议)。
由于我对这些概念不是很熟悉,因此我想了解它在尝试实现简单性时的用处。我对Scala中有关此概念的任何示例或展示特别感兴趣。
您可以按需选择多态作为多态。
Clojure 社区对“点菜多态”一词感到自豪,因为 Clojure 支持多种多态策略。他们之中有一些是:
继承多态性
这是Java使用的多态策略。Clojure 通过代理支持这一点。在进行 Java 互操作时很有用。
协议
Clojure 的协议就像 Haskell 的 TypeClass。
多方法
虽然协议基于第一个参数的类型提供多态分派,但多方法更加灵活,可以基于方法的(任何)参数的任何函数进行分派。
多态点菜意味着“选择最适合您情况的多态策略。它们都在您的工具箱中。”
您可以TypeClass
使用隐式在 Scala 中实现模式。如果您想要真实世界的示例,请阅读Scalaz 源代码。Scala 不支持语言级别的多方法,但我想在即将到来的 2.10 宏的帮助下这是可能的。
至于好处,TypeClass 和 Multimethod 等高级多态策略可以帮助解决Expression Problem。
“目标是按情况定义数据类型,在这种情况下,可以在数据类型上添加新的情况并在数据类型上添加新的函数,而无需重新编译现有代码,同时保持静态类型安全(例如,无强制转换)”。
顺便说一句,这个问题太大了,不适合单个 StackOverflow 问题。我的建议是熟悉这些概念,然后你就会明白它们的用处。