是否有任何方法可以对有区别的联合函数进行模式匹配,例如: -
type Test =
| A of string
| B of int
| C of char
let DefaultTest t =
match t with
| A(_) -> A(null)
| B(_) -> B(0)
| C(_) -> C('\u0000')
let a = A |> DefaultTest
Run Code Online (Sandbox Code Playgroud)
显然这段代码无效F#,因为DefaultTest接受一个Test类型的参数而不是'a - > Test.如果没有为受歧视的联盟指定价值,有没有办法实现这一目标?
最终,我所追求的是一个输入类型'a - > Test并输出Test(默认值'a)的函数的函数.
我不清楚你在追求什么,但这有帮助吗?
type Foo =
| A of int
| B of string
let CallWithDefault f =
let x = Unchecked.defaultof<_>
f x
let defaultA = CallWithDefault A
let defaultB = CallWithDefault B
printfn "(%A) (%A)" defaultA defaultB
Run Code Online (Sandbox Code Playgroud)