此代码编译的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