Scala “什么是”呢;“点菜式”;我怎样才能从中受益呢?
Rick Hickey在他的演讲中谈到了“点菜”(大约30:00进入视频)。在同样的背景下,他还提到了Haskell和Clojure的(以及协议) 因为我对这些概念不是很熟悉,所以我想了解它在尝试实现简单性时的有用性。我特别感兴趣的是Scala中关于这一概念的任何示例或展示 您可以按需按单点多态性 Clojure社区以术语多态性为荣,因为Clojure支持多种多态性策略。其中包括:Scala “什么是”呢;“点菜式”;我怎样才能从中受益呢?,scala,functional-programming,typeclass,multimethod,Scala,Functional Programming,Typeclass,Multimethod,Rick Hickey在他的演讲中谈到了“点菜”(大约30:00进入视频)。在同样的背景下,他还提到了Haskell和Clojure的(以及协议) 因为我对这些概念不是很熟悉,所以我想了解它在尝试实现简单性时的有用性。我特别感兴趣的是Scala中关于这一概念的任何示例或展示 您可以按需按单点多态性 Clojure社区以术语多态性为荣,因为Clojure支持多种多态性策略。其中包括: 遗传多态性 这是Java使用的多态性策略。Clojure通过代理支持此操作。在执行Java互操作时非常有用 协
- 遗传多态性 这是Java使用的多态性策略。Clojure通过代理支持此操作。在执行Java互操作时非常有用
- 协议 Clojure的协议与Haskell的类型类相同
- 多方法 虽然协议提供了基于第一个参数类型的多态调度,但多方法更加灵活,可以基于方法(任意)参数的任何函数进行调度
TypeClass
模式。如果你想要真实世界的例子,请阅读。Scala不支持语言级别的多方法,但我想在即将发布的2.10宏的帮助下,这是可能的
至于好处,先进的多态性策略,如TypeClass和Multimethod可以帮助解决这个问题
“目标是按案例定义数据类型,在这种情况下,可以向数据类型添加新案例,并在数据类型上添加新函数,而无需重新编译现有代码,同时保留静态类型安全性(例如,无强制转换)”
顺便说一句,这个问题太大了,不适合一个单独的问题。我的建议是熟悉这些概念,然后你就会明白它们的用处 非常小的挑剔,但是如果“协议根据第一个参数的类型提供多态分派”,那么它们就不对应于Haskell类型的类。类型类实例可以对任何对象“分派”(您甚至可以让零参数类型函数在类型类的实例(如
read
)中返回值,并且返回值的类型将确定使用哪个实例)。read
当然会接受参数。我不知道我写这篇文章的时候脑子在哪里mempty
就是我所说的一个例子read
根据预期的返回类型进行调度。“[…]目标是按案例定义数据类型,其中可以向数据类型添加新案例,并在数据类型上添加新函数[…]”。。。这里的case是什么意思?