2014-06-22 87 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/)(它不是唯一的實現方式) –

相關問題