如何在F#中遍历判别联合类型并调用其成员函数?
在F#中遍历判别联合类型并打印对应描述的实现方案
需求:遍历判别联合类型的每个case并打印对应描述,示例定义代码如下:
type Car = | Benz | Honda member this.description() = match this with | Benz -> "Benz description" | Honda -> "Honda description"拟使用
FSharpType.GetUnionCases typeof<Car>遍历联合类型的case,请问在F#中是否可以实现该需求?
当然可以实现,具体实现步骤及代码如下:
- 首先引用
FSharp.Reflection命名空间,FSharpType与FSharpValue相关API都归属该命名空间 - 通过
FSharpType.GetUnionCases获取目标联合类型的所有case定义 - 针对每个case,调用
FSharpValue.MakeUnion创建对应的实例(当前示例中联合类型case无参数,传入空数组[||]即可;若case带参数,需传入对应参数数组) - 将实例转换为
Car类型后,调用其description方法并打印结果
完整可运行代码:
open FSharp.Reflection type Car = | Benz | Honda member this.description() = match this with | Benz -> "Benz description" | Honda -> "Honda description" // 遍历联合类型所有case并打印描述 let unionCases = FSharpType.GetUnionCases typeof<Car> for case in unionCases do let carInstance = FSharpValue.MakeUnion(case, [||]) :?> Car printfn "%s" (carInstance.description())
运行后输出结果:
Benz description Honda description
内容的提问来源于stack exchange,提问作者JavaHava
相关产品推荐
相关产品推荐

