什么是“多态点菜”,我怎样才能从中受益呢?
Rick Hickey在Simple Made Easy的演讲中谈到了“ 多态点菜 ”(约30点到video)。 在同样的背景下,他还提到了Haskell的types类和Clojure的多方法 (和协议)。
由于我对这些概念不是很熟悉,所以我想了解它在实现简单性时的用处。 我对Scala中这个概念的任何例子或展示特别感兴趣。
您可以根据需要将多态性作为多态性 点菜 。
由于Clojure支持多种多态策略,Clojure社区为单点多态而自豪。 他们之中有一些是:
-
基于原型的多态性
-
inheritance多态性
这是Java使用的多态策略。 Clojure通过代理支持。 在进行Java互操作时很有用。
-
协议
协议Clojure是作为TypeClass哈斯克尔。
-
多元法
虽然协议基于第一个参数的types提供了多态调度,但multimethods更加灵活,可以基于方法(任何)参数的任何函数进行调度。
多态性点菜意味着“select最适合您的情况的多态策略,它们都在您的工具箱中”。
您可以使用蕴涵在Scala中实现TypeClass
模式。 如果你想要真实世界的例子,请阅读Scalaz源代码 。 Scala在语言层面不支持multimethods,但是我想在即将推出的2.10macros的帮助下是可能的。
至于效益,TypeClass和Multimethod等先进的多态策略可以帮助解决expression式问题 。
“我们的目标是根据案例定义数据types,在这种情况下,可以将新案例添加到数据types中,并对数据types添加新的function,而不用重新编译现有的代码,同时保持静态types的安全性(例如,没有强制转换)。
顺便说一句,这个问题太大,不适合一个单一的StackOverflow问题。 我的build议是熟悉这些概念,然后你会明白它们的用处。