【发布时间】:2017-11-18 08:12:52
【问题描述】:
我们可以使用像type Address = Address of string这样的解包函数来解包类型
let unwrapAddress (Address a) = a
let addr = Address "sdf"
let str = unwrapAddress addr
所以str 将是string 类型,但如果有这样的类型,这种方法将不起作用:
type Composite = Composite of integer:int * someStr:string
let unwrap (Composite c) = c
会产生错误
let unwrap (Composite c) = c;;
------------^^^^^^^^^^^
error FS0019: This constructor is applied to 1 argument(s) but expects 2
我能否以某种方式将复合类型解包为一个简单的元组?
【问题讨论】:
-
嗯,就像 PM,所以你可以写:
let unwrap (Composite (i, s)) = i, s -
我已经更正了您问题中的错误信息。您可能得到了另一个,因为您忘记将类型定义运行到 FSI 中。好问题,不过!我不知道这种边缘情况。
标签: f# namedtuple discriminated-union