F#入门-第二章 F#基础-第十九节 option类型

    F#中可以使用的便利的类型之一就是option类型。使用option类型,可以表示“不存在值,存在某个值“。
    option类型的简单定义如下所示(根据Expert F# p37)

option类型
type 'a option =
  | None //不存在值
  | Some of 'a //存在值

 
    下例中举例说明option类型的值。

option类型的值
> Some 3;;
val it : int opt = Some 3
> Some "hello";;
val it : string opt = Some "hello"
> None;;
val it : 'a opt = None


    option类型在执行有可能失败的计算,例如寻找元素时使用。
    事实上,对于F#的列表LIST,存在着tryfind函数,该函数使用option类型将寻找结果返回.

tryfind示例
> List.tryfind ((=)1) [2;3;4];;
val it : int option = None
> List.tryfind ((=)2) [2;3;4];;
val it : int option = Some 2


    这段代码中对于[2;3;4]这个列表调查1或2存不存在.

    在上例中,因为没有要寻找的数据,所以返回None类型的数据.
    同时,请注意None类型不是'a option,而是int option.
    另外,对于列表来说,还存在着不使用option类型,而是有可能抛出异常的方法List.find.

    使用匹配模式来对option类型的数据进行操作.下面的示例中接受int option类型的值,如果接受到的值存在,就将该值加一,然后返回int option类型。

option类型的操作
let add1 a =
    match a with
        | None -> None
        | Some(x) -> Some(x+1);;
print_any (add1 (Some 2));;
print_any (add1 None);;
//Some 2 |> add1 |> print_any;;
//None |> add1 |> print_any;;


    但是,F#中关于option类型的基本操作,专门定义了Option模块。对于上例中的add1可以做如下定义。

option模块的利用
let add1 a = Option.map ((+)1) a;;


    Option.map和List.map和Array.map的基本使用方法是相同的,将Some(a)这种值更改为Some(f a),然后返回。同时,对于None仍然返回None。

    其他的基本函数有
        判断是不是Some类型的is_some
        判断是不是None类型的is_none
        如果是Some型泽将该值返回的get
    等等。

option模块的利用2
let s = Some 1;;
let n = None;;

Option.is_some s;; //true
Option.is_some n;; //false
Option.is_none s;; //false
Option.is_none n;; //true
Option.get s;; //1
//Option.get n;; //Error
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值