在至少一些 ML 家族语言中,您可以定义可以在其上执行模式匹配的记录,例如http://learnyouahaskell.com/making-our-own-types-and-typeclasses - 基本思想是您定义一个具有命名字段的记录类型,使用这些字段作为参数自动创建构造函数,以便您可以创建该类型的记录,并且使用这些字段作为参数自动创建提取器,以便您可以对该类型的记录进行模式匹配。
Scala 更进一步,允许存储在记录中的字段、构造函数参数和提取器参数彼此分离,例如http://daily-scala.blogspot.com/2009/11/overloaded-unapply.html -在这方面,它实现了支持面向对象和函数式编程的目标。(当然,面向对象的语言通常允许将存储的字段和构造函数参数解耦,尽管它们通常没有提取器。)
是否有其他语言具有模式匹配并允许这种解耦?
有没有关于这种脱钩的利弊的文章?