我有以下代碼(`IGNORECASE是我在別處定義的有源圖案):負模式匹配
match myType with
| {Field1 = IgnoreCase "invalid"} -> None
| {Field2 = Some f2
Field3 = Some f3
Field4 = None | Some (0 | 1 | 2)}
-> Some (f2, f3)
| _ -> None
正如你可以看到,Field1
具有黑名單值和Field4
已列入白名單的值(這樣做Field2
和Field3
,因爲它們必須是Some
)。恕我直言,如果我可以在同一種情況下進行所有檢查,例如Field1 = IgnoreCase "invalid"
與其他比賽一起使用,恕我直言,它會看起來稍微更清潔。 Field1 <> IgnoreCase "invalid"
,但該特定示例不能編譯。我瞭解守衛,但看起來不像原來的解決方案。
是否有可能做「負面」(邏輯NOT)模式匹配的意義上說,一個值不應該匹配其他值,而不使用守衛?
當f <>「invalid」時,您可以添加一個警衛:'{Field1 = f}。 – Lee
謝謝。我瞭解守衛,並打算在問題中提到這一點。現在更新。 – cmeeren