以下代码尝试组合两个匹配案例None和Some s when s <= aDate(如果日期为无或日期<= aDate,则为"部分1").
match date with
| None
| Some s when s <= aDate ->
..... // Part 1
| _ ->
.....
Run Code Online (Sandbox Code Playgroud)
但它得到错误?如何避免两次重写"第1部分"?
这个'或'模式的两个方面绑定了不同的变量集
以下代码有效.
match date with
| None ->
..... // Part 1
| Some s when s <= aDate ->
..... // repeat Part 1
| _ ->
.....
Run Code Online (Sandbox Code Playgroud)
由于编译错误所解释的原因,我认为你不能这样做.
但是,您应该能够使用活动模式解决重复问题:
let (|IsPart1|_|) aDate candidate =
match candidate with
| None -> Some ()
| Some s when s <= aDate -> Some ()
| _ -> None
Run Code Online (Sandbox Code Playgroud)
这将使您能够编写如下函数:
let foo date aDate =
match date with
| IsPart1 aDate -> "Part 1"
| _ -> "Part 2"
Run Code Online (Sandbox Code Playgroud)
以下是一些FSI用法示例:
> let aDate = DateTime(2015, 7, 29);;
val aDate : DateTime = 29.07.2015 00:00:00
> foo None aDate;;
val it : string = "Part 1"
> foo (Some (DateTime(2011, 1, 1))) aDate;;
val it : string = "Part 1"
> foo (Some (DateTime(2015, 7, 30))) aDate;;
val it : string = "Part 2"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
496 次 |
| 最近记录: |