1
因此,我正在学习F#并且一直在研究列表经常用于模式匹配。我看到了2种不同的List模式,我试图弄清楚它们之间的区别。2种列表模式之间的差异
因此,可以说,我们正在做的模式字符的列表匹配,像这样
let charlist = ['x';'y';'z']
,我们像这样被匹配它,
match charlist with
这将是这两个情况之间的差异?
因此,我正在学习F#并且一直在研究列表经常用于模式匹配。我看到了2种不同的List模式,我试图弄清楚它们之间的区别。2种列表模式之间的差异
因此,可以说,我们正在做的模式字符的列表匹配,像这样
let charlist = ['x';'y';'z']
,我们像这样被匹配它,
match charlist with
这将是这两个情况之间的差异?
当然,你可以要求编译器:
> 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
由于第二条规则是永远不会匹配,你知道第一次做时,它只会匹配,从而使第二个是匹配第一条规则的一个子集。反转订单会产生相同的错误消息。因此,我们知道它们是相同的。
不错。我会通过编译这两个选项到程序集然后检查IL来请求编译器。这更快更容易。 – phoog 2014-09-08 19:47:39