列举一个受歧视的工会

时间:2019-01-15 11:06:41

标签: f#

我已经阅读了How to enumerate a discriminated union in F#?

的答案

我喜欢建议的解决方案:solution

但是,我不确定如何编写将区分的联合作为参数传递的函数吗?

let testDisUnion a =
    SimpleUnionCaseInfoReflection.AllCases<a> 
    |> Seq.iter (fun (_, instance) -> printfn "name: %s" instance)

谢谢

1 个答案:

答案 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“函数”。我用引号写函数,因为尽管没有适当的参数,但类型实参是函数输入的一种类型,这意味着仅当您使用类型实参“调用”该值时,才对值进行求值。