仅打印 Union 类型的案例
Print only cases of Union Type
我有这段代码,目的是只打印 Union 类型的案例 Event
:
type CustomerPromoted = { id: string; level: int }
type CustomerCreated = { id: string; companyName: string }
type Event =
| Created of CustomerCreated
| Promoted of CustomerPromoted
let printEvents (events: Event list) =
events
|> List.iter (fun event -> printfn "%A" event)
[<EntryPoint>]
let main argv =
let created = { id = "1"; companyName = "MS" }
let promoted = { id = "1"; level = 3 }
printEvents [ created, promoted ]
0
但行
printEvents [ created, promoted ]
导致此错误:
This expression was expected to have type 'Event' but here has type ''a * 'b'
我该如何解决这个问题?
我可以只使用 let printEvents (events)
但是我会有这个签名:'a list -> unit
我想要 Event list -> unit
[ created, promoted ]
是 CustomerCreated * CustomerPromoted
类型元组的单元素列表。所以第一个修复是使用列表分隔符 ;
而不是元组分隔符 ,
。 [ created; promoted ]
第二个修复是注意受歧视的联合不是别名。 Created
属于 Event
类型,其中包含 CustomerCreated
类型的数据。因此,将 let created = { id = "1"; companyName = "MS" }
更改为 let created = Created { id = "1"; companyName = "MS" }
将创建您想要的类型。
我有这段代码,目的是只打印 Union 类型的案例 Event
:
type CustomerPromoted = { id: string; level: int }
type CustomerCreated = { id: string; companyName: string }
type Event =
| Created of CustomerCreated
| Promoted of CustomerPromoted
let printEvents (events: Event list) =
events
|> List.iter (fun event -> printfn "%A" event)
[<EntryPoint>]
let main argv =
let created = { id = "1"; companyName = "MS" }
let promoted = { id = "1"; level = 3 }
printEvents [ created, promoted ]
0
但行
printEvents [ created, promoted ]
导致此错误:
This expression was expected to have type 'Event' but here has type ''a * 'b'
我该如何解决这个问题?
我可以只使用 let printEvents (events)
但是我会有这个签名:'a list -> unit
我想要 Event list -> unit
[ created, promoted ]
是 CustomerCreated * CustomerPromoted
类型元组的单元素列表。所以第一个修复是使用列表分隔符 ;
而不是元组分隔符 ,
。 [ created; promoted ]
第二个修复是注意受歧视的联合不是别名。 Created
属于 Event
类型,其中包含 CustomerCreated
类型的数据。因此,将 let created = { id = "1"; companyName = "MS" }
更改为 let created = Created { id = "1"; companyName = "MS" }
将创建您想要的类型。