Scala “什么是”呢;“点菜式”;我怎样才能从中受益呢?

Scala “什么是”呢;“点菜式”;我怎样才能从中受益呢?,scala,functional-programming,typeclass,multimethod,Scala,Functional Programming,Typeclass,Multimethod,Rick Hickey在他的演讲中谈到了“点菜”(大约30:00进入视频)。在同样的背景下,他还提到了Haskell和Clojure的(以及协议) 因为我对这些概念不是很熟悉,所以我想了解它在尝试实现简单性时的有用性。我特别感兴趣的是Scala中关于这一概念的任何示例或展示 您可以按需按单点多态性 Clojure社区以术语多态性为荣,因为Clojure支持多种多态性策略。其中包括: 遗传多态性 这是Java使用的多态性策略。Clojure通过代理支持此操作。在执行Java互操作时非常有用 协

Rick Hickey在他的演讲中谈到了“点菜”(大约30:00进入视频)。在同样的背景下,他还提到了Haskell和Clojure的(以及协议)

因为我对这些概念不是很熟悉,所以我想了解它在尝试实现简单性时的有用性。我特别感兴趣的是Scala中关于这一概念的任何示例或展示

您可以按需按单点多态性

Clojure社区以术语多态性为荣,因为Clojure支持多种多态性策略。其中包括:

  • 遗传多态性

    这是Java使用的多态性策略。Clojure通过代理支持此操作。在执行Java互操作时非常有用

  • 协议

    Clojure的协议与Haskell的类型类相同

  • 多方法

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

多态性点菜意味着“选择最适合您的情况的多态性策略。它们都在您的工具箱中。”

您可以在Scala中使用implicits实现
TypeClass
模式。如果你想要真实世界的例子,请阅读。Scala不支持语言级别的多方法,但我想在即将发布的2.10宏的帮助下,这是可能的

至于好处,先进的多态性策略,如TypeClass和Multimethod可以帮助解决这个问题

“目标是按案例定义数据类型,在这种情况下,可以向数据类型添加新案例,并在数据类型上添加新函数,而无需重新编译现有代码,同时保留静态类型安全性(例如,无强制转换)”


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

非常小的挑剔,但是如果“协议根据第一个参数的类型提供多态分派”,那么它们就不对应于Haskell类型的类。类型类实例可以对任何对象“分派”(您甚至可以让零参数类型函数在类型类的实例(如
read
)中返回值,并且返回值的类型将确定使用哪个实例)。
read
当然会接受参数。我不知道我写这篇文章的时候脑子在哪里
mempty
就是我所说的一个例子
read
根据预期的返回类型进行调度。“[…]目标是按案例定义数据类型,其中可以向数据类型添加新案例,并在数据类型上添加新函数[…]”。。。这里的case是什么意思?