我已经阅读了How to enumerate a discriminated union in F#?
的答案我喜欢建议的解决方案:solution
但是,我不确定如何编写将区分的联合作为参数传递的函数吗?
let testDisUnion a =
SimpleUnionCaseInfoReflection.AllCases<a>
|> Seq.iter (fun (_, instance) -> printfn "name: %s" instance)
谢谢
答案 0 :(得分:3)
这是按照dumetrulo建议使用类型参数的方法:
let testDisUnion<'a> =
SimpleUnionCaseInfoReflection.AllCases<'a>
|> Seq.iter (fun (_, instance) -> printfn "name: %A" instance)
testDisUnion<MyType>
//name: A
//name: B
type MyType = A | B
类型参数<'a>
从您的“函数”传递到AllCases
“函数”。我用引号写函数,因为尽管没有适当的参数,但类型实参是函数输入的一种类型,这意味着仅当您使用类型实参“调用”该值时,才对值进行求值。