gpt4 book ai didi

f# - 使用联合类型 F# 的所有情况

转载 作者:行者123 更新时间:2023-12-04 13:35:04 25 4
gpt4 key购买 nike

这与这里的问题非常相关How to enumerate an enum/type in F# .我定义了一个联合类型,然后我需要在静态方法中使用该类型的所有可能情况。例如:

type Interests =
| Music
| Books
| Movies
with
static member GetValue( this) = match this with
| Music -> 0
| Books -> 5
| Movies -> 0
static member GetSeqValues() = allCases|>Seq.map(GetValue)

我如何获得 allCases ?

非常感谢

最佳答案

您可以使用 FSharpType.GetUnionCases()来自 Microsoft.FSharp.Reflection获取所有受歧视工会的案例。在您的示例中,它看起来像这样:

type Interests = 
| Music
| Books
| Movies
static member GetValue(this) = (...)
static member GetSeqValues() =
// Get all cases of the union
let cases = FSharpType.GetUnionCases(typeof<Interests>)
[ for c in cases do
// Create value for each case (assuming it has no arguments)
let interest = FSharpValue.MakeUnion(c, [| |]) :?> Interests
yield GetValue(interest) ]

但是,问题是您可能无法创建实例以传递给您的 GetValue成员,因为某些情况可能有参数(在调用 MakeUnion 时,您必须将参数数组传递给它,而我只使用了一个空数组)。例如,如果您有:
type Sample =
| A of int
| B of bool

关于f# - 使用联合类型 F# 的所有情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4470366/

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