F#记录类型是作为结构还是类实现的?

F#记录类型是作为结构还是类实现的?,f#,record,F#,Record,我在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

我在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 }
我无法确定这是作为值还是引用类型实现的


我尝试将
[]
放在类型定义之前,但这会导致各种编译错误。

根据这篇wikipedia文章,记录类型被实现为定义了属性的类。

[]
是请求值类型的正确语法。它可以在“专家F#”的第6章中看到,F#2.0接受这一点:

[]
类型点=
val x:浮动
新(x)={x=x;}

虽然如果您将其写成
[]类型Point=
(即全部在一行),它会产生大量警告(尽管没有错误)。您使用的是哪个版本的F#?

记录是类,但默认情况下所有字段都是不可变的。为了使用引用类型的“优势”,必须将字段设置为可变字段(可以将一些字段设置为不可变字段,另一些字段设置为可变字段),然后修改其值:

type Point =
    {
        mutable x : float
        y : float
        z : float
    }
    member p.AddToX Δx = p.x <- p.x + Δx
类型点=
{
可变x:浮点
y:浮子
z:浮动
}

VS2010中的成员p.AddToXΔx=p.x F#2.0。我想区别在于你的代码不再是记录类型了?啊,你说得对。由于缺少您的
向量
我没有仔细考虑就重写了代码,对不起。记录类型始终是引用类型:
type Point =
    {
        mutable x : float
        y : float
        z : float
    }
    member p.AddToX Δx = p.x <- p.x + Δx