我在F#中使用记录类型来存储一些简单数据,例如:
open Vector
type Point =
{
x: float;
y: float;
z: float;
}
static member (+) (p: Point, v: Vector) = { Point.x = p.x + v.x ; y = p.y + v.y ; z = p.z + v.z }
static member (-) (p: Point, v: Vector) = { Point.x = p.x - v.x ; y = p.y - v.y ; z = p.z - v.z }
static member (-) (p1: Point, p2: Point) = { Vector.x = p1.x - p2.x ; y = p1.y - p2.y ; z = p1.z - p2.z }
member p.ToVector = { Vector.x = p.x ; y = p.y ; z = p.z }
Run Code Online (Sandbox Code Playgroud)
我无法确定这是否将实现为值或引用类型.
我已尝试[<Struct>]在类型定义之前放置,但这会导致各种编译错误.
[<Struct>]是请求值类型的正确语法.它可以在'Expert F#'的第6章中看到,这被F#2.0接受:
[<Struct>]
type Point =
val x: float
new(x) = {x=x;}
Run Code Online (Sandbox Code Playgroud)
虽然如果你把它写成[<Struct>] type Point =(即所有在一行上),它会产生许多警告(尽管没有错误).您使用的是哪个版本的F#?