作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们如何在 F# 中为不可变结构定义一个仅接受部分字段的构造函数。或者,与 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;
}
}
上面的 Point(x) 向量通过调用 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
最佳答案
您可以使用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
顺便说一句,您还可以使用带有 Struct
属性的普通 type
定义来声明结构。这当然是一个风格问题,但我更喜欢这种变体:
[<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)
关于struct - 如何在 F# 中为结构体定义一个 ctor,进而调用该结构体的默认 ctor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25995332/
我是一名优秀的程序员,十分优秀!