gpt4 book ai didi

f# - 这个 'or' 模式的两侧绑定(bind)了不同的变量集?

转载 作者:行者123 更新时间:2023-12-04 12:07:27 24 4
gpt4 key购买 nike

以下代码尝试组合两个匹配案例 NoneSome s when s <= aDate (如果日期为无或日期 <= aDate,请执行“第 1 部分”)。

match date with
| None
| Some s when s <= aDate ->
..... // Part 1
| _ ->
.....

但是它得到错误?如何避免两次重写“第 1 部分”?

The two sides of this 'or' pattern bind different sets of variables



以下代码有效。
match date with
| None ->
..... // Part 1
| Some s when s <= aDate ->
..... // repeat Part 1
| _ ->
.....

最佳答案

我认为您不能这样做,原因由编译器错误解释。

但是,您应该能够使用 active pattern 解决重复问题。 :

let (|IsPart1|_|) aDate candidate =
match candidate with
| None -> Some ()
| Some s when s <= aDate -> Some ()
| _ -> None

这将使您能够编写这样的函数:
let foo date aDate =
match date with
| IsPart1 aDate -> "Part 1"
| _ -> "Part 2"

以下是一些 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"

关于f# - 这个 'or' 模式的两侧绑定(bind)了不同的变量集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31710260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com