我有以下内容:
type union1 =
| Case1 of string
| Case2 of int
let union1s = seq { for i in 1..5 do yield case2 i }
如何更改union1s
为 type 序列seq<int>
?
就像是:
let matchCase item =
match item with
| Case1 x -> x
| Case2 x -> x
let case2s = Seq.map matchCase union1s
此尝试不起作用,因为 matchCase 无法返回两种不同的类型。
建议的答案有同样的问题(如果我理解正确的话)
let matchCaseOpt = function
| Case1 x -> Some x
| Case2 x -> Some x
| _ -> None
let case2s = Seq.choose matchCaseOpts unions1s
Some x 期望的表达式在 Case2 的匹配项中需要类型选项字符串
我已经通过使用 DU 序列解决了我的特定用例。
type Union1s =
| Case1s of seq<string>
| Case2s of seq<int>