所以,我正在学习F#并且一直在研究如何在模式匹配中使用列表。我看到了两种不同的List模式,我试图找出它们之间的区别。
所以我们假设我们正在像这样的字符列表中进行模式匹配
let charlist = ['x';'y';'z']
我们正如此匹配,
match charlist with
这两种情况会有什么区别?
| [a;b;c] ->
| a::b::c::[] ->
答案 0 :(得分:4)
当然,你可以问编译器:
> match charlist with
- |[a;b;c] -> ()
- |a::b::c::[] -> ()
- | _ -> ();;
|a::b::c::[] -> ()
-^^^^^^^^^^^
/home/john/stdin(13,2): warning FS0026: This rule will never be matched
由于第二条规则永远不会匹配,因此您知道它只会在第一条规则匹配时匹配,以便第二条规则匹配第一条规则的子集。撤消订单会产生相同的错误消息。因此,我们知道它们完全相同。