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

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

对于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"];}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值