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

时间:2014-06-22 12:24:51

标签: scala pattern-matching type-systems

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

val user: Option[User] = findUser(123)
user match {
    case Some(u) => ...
    case _ => ...
}

我对模式匹配和类型系统的关系有一些疑问:

  1. 是"静态类型系统"必须支持模式匹配吗?
  2. 是否有任何"动态类型系统"语言支持模式匹配?

  3. 更新

    感谢@ Eran的回答。

    我知道有很多语言不支持模式匹配,比如c / c ++ / java / python / ruby​​ / javascript / lisp(我可以在这个列表中添加&#34; bash&#34;)< / p>

    如果我们想添加&#34;模式匹配&#34;对他们来说,理论上可以添加哪些语言?在任何情况下,哪些语言都无法做到?

1 个答案:

答案 0 :(得分:6)

我假设你的意思是一般的值的模式匹配。字符串模式匹配(正则表达式)的特殊情况通过几乎任何语言的库函数得到支持。

模式匹配和类型检查策略是独立的语言&#34;功能&#34;。 模式匹配是将值与模式匹配并且成功匹配然后绑定到变量的过程。 如果在编译时或运行时强制执行类型检查,则类型系统是静态的或动态的。

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

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

切向地,我发现模式匹配实际上可以用作计算的基础非常有趣。你可以搜索Barry Jay的模式演算工作,如果这会激起你的好奇心。