带有重载提取器的 Scala 语言?

标签 scala f# programming-languages functional-programming pattern-matching

至少在某些 ML 系列语言中,您可以定义可以执行模式匹配的记录,例如http://learnyouahaskell.com/making-our-own-types-and-typeclasses - 基本思想是你定义一个带有命名字段的记录类型,一个构造函数被自动创建,使用这些字段作为参数,以便你可以创建该类型的记录,并且自动创建一个提取器,使用这些字段作为参数,以便你可以进行模式匹配在这种类型的记录上。

Scala 更进一步,允许存储在记录中的字段、构造函数参数和提取器参数彼此解耦,例如http://daily-scala.blogspot.com/2009/11/overloaded-unapply.html - 在这方面,它实现了支持面向对象和函数式编程的目标。 (当然,面向对象的语言通常允许将存储的字段和构造函数参数解耦,尽管它们通常没有提取器。)

是否有其他语言具有模式匹配并允许这种解耦?

有没有关于这种脱钩的利弊的文章?

最佳答案

我承认我没有 100% 的背景知识来理解您的问题,但我可以说 F# 有一个名为“Active Patterns”的功能,它似乎可以用来构建与您的 daily-scala 相同的功能。链接演示。

那是在您要找的附近吗?

关于带有重载提取器的 Scala 语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560422/

相关文章:

lambda F# : getting minimum value from list regardless if input is string or int

c# - c#语言中的事件处理程序

programming-languages - Lua 是一种非开发人员可以快速学习的语言吗?

scala - 编译时检查某些属性

java - Scala/Java 项目在 Maven 编译期间找不到依赖项

scala - 函数式编程 + 领域驱动设计

scala - 将 Map 中的 Map(key, Set[value]) 附加到 Scala 2.11 中的现有 Key

f# - 以下 ocamlyacc 代码的 fsyacc 等价物是什么?

azure - 为 Azure Function 编译 F# .NET Core 项目

programming-languages - 关于高阶逻辑推理形式主义表达能力的问题