F# 入门(八): 值类型/引用类型

来源:互联网 发布:安卓按键精灵脚本源码 编辑:程序博客网 时间:2024/06/05 10:05

总得来说,数据值存储在栈上面的称为值类型,而数据值存储在堆上面的称为引用类型。

对于F#而言,每个声明的值都会在创建时被初始化,因为在函数式的编程中,值被声明后就是不可变的。下面看看怎么获取某个值的情况:

Unchecked.defaultof<'a>

获取'a的默认值

typeof<'a>

返回描述'a的System.Type对象

sizeof<'a>

返回'a在栈上的空间大小

在F#中,默认所有值是不能更改的,那么怎么样来改变一个值呢,一个方法是用Ref引用单元(主要用于引用类型的更改),还有用mutable关键字(主要用于值类型的更改),下篇会讲关于mutable。

这里使用ref将值变为引用类型,同时,使用!读取引用类型的值,使用:=写入引用类型的值。让我们来看看例子:

1)

//将引用类型的值绑定给变量a

> let a = ref "hello";;

val a : string ref = {contents = "hello";}

//读取a的值

> !a;;

val it : string = "hello"

//写入a的值然后显示

> a := "world";;

val it : unit = ()

> !a;;

val it : string = "world"

2)

//对于引用类型改变值

> let Days =

    ref [ "Monday"; "Tuesday";

          "Wednesday"; "Thursday";

          "Friday";  "Saturday";

          "Sunday";]

//过滤掉星期天

// 通过(!)获取Days的,再通过(:=)赋予新的值

Days := !Days |> List.filter(fun d -> d <> "Sunday");;

val Days : string list ref =

  {contents =

    ["Monday"; "Tuesday"; "Wednesday"; "Thursday"; "Friday"; "Saturday"];}

原创粉丝点击