我一直在尋找的模式在F#類型匹配語法描述如下:與「:?輸入名稱」匹配的F#類型:爲什麼我們需要一個新名稱?
http://msdn.microsoft.com/de-de/library/dd547125.aspx#sectionToggle14
實例從該頁面(略有修改):
open System.Windows.Forms
let RegisterControl (control: Control) =
match control with
| :? Button as button -> button.Text <- "Registered."
| :? CheckBox as checkbox -> checkbox.Checked <- false
| _ ->()
我不明白的是爲什麼我們需要引入一個新名稱(「button」,「checkbox」)以及類型檢查。如果匹配成功,編譯器應該知道「控制」具有所需的類型,並可以在下面的表達式/語句中對其進行相應處理。換句話說,我爲什麼不能做到這一點:
open System.Windows.Forms
let RegisterControl (control: Control) =
match control with
| :? Button -> control.Text <- "Registered."
| :? CheckBox -> control.Checked <- false
| _ ->()
這將是類似"type guard" feature in TypeScript 1.4。
F#有沒有這麼好的理由? (注:我運行VS 2012)
確實,這是非常明顯的。猜猜我太專注於例子。謝謝。 – 2014-11-22 18:37:33
示例驅動的語言設計:-) – 2014-11-22 19:20:49
示例驅動的語言理解,不可避免地帶有愚蠢的問題:)我不會僅僅基於示例進入語言設計,承諾。 – 2014-11-23 16:16:40