gpt4 book ai didi

.net - 在 F# 中是否可以创建一个模式来匹配多个判别联合的情况?

转载 作者:行者123 更新时间:2023-12-03 18:16:04 26 4
gpt4 key购买 nike

假设我有一个像这样受歧视的工会:

type Example = 
|Foo of string
|Bar of int
|Baz of int
|Qux of int
|NoValue

有没有什么简洁的方法可以在不指定所有剩余情况的情况下完成以下功能
let doIt (ex:Example) = 
match ex with
| Foo(_) -> 0
| NoValue -> -1

这样该模式将以相同的方式一般处理剩余的类似结构的联合案例。在示例代码中,这意味着 Bar、Baz 和 Qux 的单个 case 语句的行为如下所示。
    | Bar(i) -> i

我在语言引用中没有看到任何允许这种类型匹配的内容,但我很好奇是否可能。

最佳答案

不像你想要的那么简洁,但你可以使用 OR pattern 做这样的事情:

let doIt (ex:Example) =
match ex with
| Foo(_) -> 0
| NoValue -> -1
| Bar(i) | Baz(i) | Qux(i) -> i;;

但是,它确实消除了该案例的所有(可能)复杂部分的重复。

为了进一步说明,即使您的案例不完全匹配,您也可以这样做:
type Example =
| Foo of string
| Bar of int * int
| Baz of int
| Qux of int
| NoValue

let doIt (ex:Example) =
match ex with
| Foo _ -> 0
| NoValue -> -1
| Bar(i,_) | Baz i | Qux i -> i

关于.net - 在 F# 中是否可以创建一个模式来匹配多个判别联合的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17393524/

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