F#教程:Record - 面向对象网 f# 学习 对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > OOP语言 > F# > 正文

F#教程:Record

来源: www.bianceng.cn 阅读:

F#和C#语言一样可以定义构造体。不过F#将这称为Record。

可以试着定义如下Point类型的 Record:

type Point = { x: float; y: float}

使用Point类型的代码:

let pt = { x = 10.0; y = 15.0 }
printfn "(%f , %f)" pt.x pt.y

let一行声明 pt时候就没有指定类型,不过F#却可以知道它是Point类型。很有趣,甚至有点吃惊是不是?

如果定义值两个所有域的名称和类型都一样的Record会如何呢?

type Point = { x: float; y: float}
type Point2 = { x: float; y: float}
let pt = { x = 10.0; y = 15.0 }

F# Interactive窗口执行后结果如下:

val pt : Point2 = {x = 10.0; y = 15.0;}

pt的类型变成了Point2。是不是有点混乱啊。

我们在试着定义如下所有域值的名称相同但类型不同的Record:

type Point = { x: float; y: float}
type Vector = { x: int; y: int}
let p = { x = 10.0; y = 15.0 }

let行会出现编译错误。虽然值域名称一样,类型不一样就无法推论。

为了消除编译错误,可以显式地指明类型:

let p = { x = 10.0; y = 15.0 } : Point 
let v = { x = 10; y = 15 } : Vector

其中,「: 类型名」指定方式和Pascal很相似。

Tags:
相关文章列表: