cit*_*kid 2 f# constructor struct
我们如何在F#中为不可变结构定义一个ctor,它只接受一些字段.或者,与C#相比,我们如何在f#中将结构清零(例如在下面的c#示例中调用this())?
C#
struct Point
{
private readonly int _x;
private readonly int _y;
public Point(int x) : this() // Will zero the struct
{
_x = x;
}
public Point(int y) : this() // Will zero the struct
{
_y = y;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的Point(x)ctor通过调用this()将结构清零,然后设置单个字段.这就是我所追求的.以下示例被大大简化,问题是如何将结构归零然后只设置一个字段.
F#
type Point =
struct
val X: float
val Y: float
new(x: float) = ? // how to zero out the struct and then set ONLY X ?
end
Run Code Online (Sandbox Code Playgroud)
您可以使用Point(x, 0.0)在结构中调用另一个构造函数:
type Point =
struct
val X: float
val Y: float
new(x: float, y: float) = { X = x; Y = y }
new(x: float) = Point(x, 0.0)
end
Run Code Online (Sandbox Code Playgroud)
作为旁注,您还可以通过使用type具有该Struct属性的普通定义来声明结构.这当然是一种风格问题,但我更喜欢这种变体:
[<Struct>]
type Point =
val X: float
val Y: float
new(x: float, y: float) = { X = x; Y = y }
new(x: float) = Point(x, 1.0)
Run Code Online (Sandbox Code Playgroud)