到目前为止,我读过的所有结构示例要么是所有字段都是可变的,要么是所有字段都是不可变的。因此,编译良好:
[<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 分配一次或两次(首先使用默认值)?
最佳答案
第二个示例中使用的显式构造语法适用于所有结构,无论它们是否具有可变字段。
我们还可以重写第一个示例以使用该语法,尽管它不太好看。还有一个技术差异,member this.X
定义一个属性,而 val X
定义一个字段。
在第三种情况下,你可以这样写:
[<Struct>]
type Numbers =
val X : int
val mutable Y : int
new(x, y) = { X = x; Y = y }
这只显式分配Y
一次。
关于f# - 如何使用可变字段和不可变字段初始化结构体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23848238/