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