我想在F#中写出这个C#的等价物:
struct Vector2 {
public readonly int X;
public readonly int Y;
public Vector2(int x, int y) {
X = x;
Y = y;
}
}
Run Code Online (Sandbox Code Playgroud)
这会强制用户提供参数来创建实例[编辑:这对于值类型是错误的 - 所有值类型都有默认构造函数].默认的Vector2也可以提供静态只读字段,即Vector2.Zero.
看起来获取公共字段的唯一方法是通过"val"关键字,但似乎不允许我使用默认构造函数初始化它们,我不希望有两个构造函数:
[<Struct>]
type MyInt(value) =
val public Value : int = value;;
val public Value : int = value;;
-------------------------------^
stdin(7,32): error FS0010: Unexpected symbol '=' in member definition
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过成员绑定来完成,但如果我理解的话,这会创建属性,而不是字段.
根据这个http://msdn.microsoft.com/en-us/library/vstudio/dd233233(v=vs.120).aspx,可以这样做
type Vector2 =
struct
val public X: int
val public Y: int
new(x: int, y: int) = { X = x; Y = y }
end
Run Code Online (Sandbox Code Playgroud)