两种List模式之间的差异

时间:2014-09-03 02:44:37

标签: f#

所以,我正在学习F#并且一直在研究如何在模式匹配中使用列表。我看到了两种不同的List模式,我试图找出它们之间的区别。

所以我们假设我们正在像这样的字符列表中进行模式匹配

let charlist = ['x';'y';'z']

我们正如此匹配,

match charlist with

这两种情况会有什么区别?

| [a;b;c] ->

| a::b::c::[] ->

1 个答案:

答案 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

由于第二条规则永远不会匹配,因此您知道它只会在第一条规则匹配时匹配,以便第二条规则匹配第一条规则的子集。撤消订单会产生相同的错误消息。因此,我们知道它们完全相同。