Scala 什么';模式匹配和类型系统之间的关系是什么?

Scala 什么';模式匹配和类型系统之间的关系是什么?,scala,pattern-matching,type-systems,Scala,Pattern Matching,Type Systems,在scala和其他一些语言(Haskell、SML)中,我们可以使用模式匹配,如: val user: Option[User] = findUser(123) user match { case Some(u) => ... case _ => ... } 我对模式匹配和类型系统的关系有一些疑问: “静态类型系统”必须支持模式匹配吗 是否有任何“动态类型系统”语言支持模式匹配 更新: 感谢@Eran的回答 我知道有很多语言不支持模式匹配,比如c/c++/java

在scala和其他一些语言(Haskell、SML)中,我们可以使用模式匹配,如:

val user: Option[User] = findUser(123)
user match {
    case Some(u) => ...
    case _ => ...
}
我对模式匹配和类型系统的关系有一些疑问:

  • “静态类型系统”必须支持模式匹配吗
  • 是否有任何“动态类型系统”语言支持模式匹配

  • 更新:

    感谢@Eran的回答

    我知道有很多语言不支持模式匹配,比如c/c++/java/python/ruby/javascript/lisp(我可以在这个列表中添加“bash”吗?)


    如果我们想给它们添加“模式匹配”,理论上什么语言可以添加它?什么语言在任何情况下都不能做到这一点呢?

    我想你指的是一般意义上的值模式匹配。字符串模式匹配的特例(正则表达式)在几乎任何语言中都通过库函数得到支持

    模式匹配和类型检查策略是独立的语言“特性”。 模式匹配是将值与模式匹配,然后将成功匹配绑定到变量的过程。 如果类型检查分别在编译时或运行时强制执行,则类型系统是静态的或动态的

    一种语言可以具有这两种功能的四种组合之一,例如:

    • C/C++/Java是不支持模式匹配的静态类型语言
    • Haskell/Scala是支持模式匹配的静态类型语言
    • Icon是一种支持模式匹配的动态类型语言
    • JavaScript是一种不支持模式匹配的动态类型语言

    Tangentially,我发现模式匹配实际上可以作为计算的基础。如果这激起了你的好奇心,你可以搜索Barry Jay的模式演算工作。

    如果我们想在c/c++/java/javascript中添加“模式匹配”功能,理论上可能吗?理论上是的。但事情往往会迅速升级。想一想,如果你想添加模式匹配并保持静态类型检查,你需要做些什么(提示:你需要以某种方式增强编译过程)。@Eran(顺便说一句,这不是唯一的实现)@om nom nom我的意思不是严格的理论。只是想强调这不是一件小事。当您的语言是图灵完全时,任何事情都是可能的。我骑在马上。