此代碼編譯的F#就好以及OCaml的:爲什麼這個F#/ OCaml「匹配」表達式編譯?
let testmatch k =
match k with
| jqk3jtl23jtlk123 -> true
我已經在這兩個FSI和UTOP測試。它總是返回true
。
jqk3jtl23jtlk123
是完全隨機的,其類型推斷爲'a
。即使我約束k
與數據類型(如let testmatch (k: int) =
)彙編(雖然明顯制約testmatch
的類型int -> bool
,而不是'a -> bool
可能有人請解釋一下這是怎麼回事具體來說:?
- 爲什麼編譯器接受一個完全隨機的文字
jqk3jtl23jtlk123
? - 爲什麼我沒有得到一個非窮盡匹配的警告?
- 什麼是真正在做什麼? 比賽
你不匹配對價值'jqk3jtl23jtlk123',你要創建一個名爲'jqk3jtl23jtlk123'值匹配任何'k'是。 – Marth
在這些語言中,您通常處於值表達式或模式匹配表達式中,並且這兩種行爲有所不同。模式匹配發生在'match ... with'之後,'function'之後,以及任何函數/方法參數中。 – TheQuickBrownFox