2014-06-22 39 views
4

在Scala和其他一些语言(Haskell中,SML),我们可以使用模式匹配,如:模式匹配和类型系统有什么关系?

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

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

  1. 是“静态类型系统”必须支持模式匹配吗?
  2. 有没有“动态类型系统”语言支持模式匹配?

更新:

感谢@叶兰的答案。

我知道有许多语言不支持模式匹配,像C/C++/JAVA /蟒蛇/红宝石/ JavaScript的/口齿不清(我能“庆典”添加到这个列表?)

如果我们想为他们添加“模式匹配”,哪种语言可以在理论上添加它?什么语言在任何情况下都无法做到?

回答

6

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

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

甲语言可以有这两个特征的四种组合,例如:

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

切线方向,我发现非常有趣的是模式匹配实际上可以用作计算的基础。你可以通过Barry Jay寻找模式演算的工作,如果这让你产生好奇心。

+0

如果我们想在c/C++/java/javascript中添加“模式匹配”功能,理论上有可能吗? – Freewind

+0

理论上,是的。但事情往往会迅速升级。想想如果你想添加模式匹配并保持静态类型检查(提示:你需要以某种方式增强编译过程),你需要做什么。 – Eran

+1

@Eran [不仅在理论上](http://www.bramstein.com/projects/funcy/)(它不是唯一的实现方式) –

相关问题