如何同时使用可变字段和不可变字段初始化结构?

雅比

到目前为止,我读过的所有结构示例都是在所有字段都是可变的或所有字段都是不可变的时候。因此,这可以很好地编译:

[<Struct>]
type Number(x:int) =
    member this.X = x

这样做也是这样:

[<Struct>]
type Number =
    val mutable X:int
    new(x) = {X = x}

但是,我不知道如何为具有一个可变字段和一个不可变字段的结构编写显式构造函数:

[<Struct>]
type Numbers(x:int) =
    member this.X = x
    val mutable Y:int
    new(x,y) = ???

显式构造函数必须清楚地调用隐式构造函数。到目前为止,我尝试过的所有幼稚解决方案都失败了。

后续问题:解决方案,无论是什么解决方案,都将字段Y分配一次或两次(首先使用默认值)?

GS-向Monica致歉

第二个示例中使用的显式构造语法适用于所有结构,无论它们是否具有可变字段。

我们也可以重写第一个示例以使用该语法,尽管看起来不太好。还有一个技术上的区别,就是member this.X定义属性而val X不是定义字段。

在第三种情况下,您可以这样编写:

[<Struct>]
type Numbers =
    val X : int
    val mutable Y : int
    new(x, y) = { X = x; Y = y }

这仅显式分配Y一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章