gpt4 book ai didi

scala - 什么是 "polymorphism a la carte"以及我如何从中受益?

转载 作者:行者123 更新时间:2023-12-03 05:31:15 25 4
gpt4 key购买 nike

在他的演讲中Simple Made Easy ,Rick Hickey 谈论“点菜多态”(视频中约 30:00)。在同一上下文中,他还提到了 Haskell 的 Type Classes和 Clojure 的 Multi-Methods (和协议(protocol))。

由于我对这些概念不太熟悉,我想了解它在尝试实现简单性时的用处。我对 Scala 中这个概念的任何示例或展示特别感兴趣。

最佳答案

您可以将点菜多态视为按需多态

Clojure 社区对“点菜多态”一词感到自豪,因为 Clojure 支持多种多态策略。其中一些是:

  • Prototype-based polymorphism

  • 继承多态

    这就是Java使用的多态策略。 Clojure 通过代理支持这一点。在进行 Java 互操作时很有用。

  • 协议(protocol)

    Clojure 的协议(protocol)就像 Haskell 的 TypeClass。

  • 多种方法

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

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

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

至于好处,TypeClass、Multimethod等高级多态策略可以帮助解决 Expression Problem

"The goal is to define a datatype by cases, where one can add new cases to the datatype and new functions over the datatype, without recompiling existing code, and while retaining static type safety (e.g., no casts)".

顺便说一句,这个问题太大了,无法用单个 StackOverflow 问题来解决。我的建议是熟悉这些概念,然后你就会理解它们的用处。

关于scala - 什么是 "polymorphism a la carte"以及我如何从中受益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13553100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com