F#入门-第二章 F#基础-第十五节 记录

    前面已介绍过了列表、元组或数组这些数据结构,除此之外,F#还有记录这种数据结构。记录表示几个值的并列排放,具有每一种数据类型前加上名称的这一特性。
    虽然相当于C语言中的结构体,但是在F#中另外有方法单独描述C语言中的结构体,关于这个请在“面向对象“一节中详细解释。
    基本的记录的写法如下所示

 记录的定义
type 类型名 = { 字段名1 : 类型名1; ... ; 字段名n : 类型名n }

 

 记录的值的写入
{字段名1 = 表达式1; ... ;字段名n =表达式n}


    例如,以下为定义具有商品名和价格字段的juice记录。

记录类型的定义
type juice = {name : string;price : int};;


    这个记录类型的数据定义如下所示。

记录类型的值
let my = {name = "Mellow Yellow";price = 110};;
let dp = {name = "Doctor Pepper";price = 120};;


    另外,可以使用现有记录定义新的记录。

    写法如下所示

 利用现有记录生成新的记录
{ 现有记录 with 字段名1 = 表达式1; ... ; 字段名n =表达式n }


    示例如下

利用现有记录生成记录
let ab = { my with name = "Ambasa" };;


    使用记录类型的变量名.字段名从记录中读取值。

从记录中读取值
> my.name;;
val it : string = "Mellow Yellow"
> ab.price;;
val it : int = 110


    记录类型的值也是,基本上一旦定义好之后,就不能被改变了。但是加上mutable关键字之后,就可以改变值。这时,使用<-来改变值。

mutable记录类型
type human = {name:string;mutable age: int};;
let nobita = {name = "nobi nobita"; age = 11};;
let time_furosiki (x:human) = x.age <- x.age + 10;;
time_furosiki nobita;;
print_int nobita.age;;


    这里我们定义了一个名字(name)不可变,年龄(age)可变的记录类型-人(human)。并用“人”来定义nobita并赋值。然后定义time_furosiki函数将年龄加上10岁并返回,然后调用time_furosiki函数修改nobita的年龄,最后显示nobita的年龄。

posted @ 2010-10-07 17:31  至尊无上  阅读(559)  评论(0)    收藏  举报