F#中可以使用的便利的类型之一就是option类型。使用option类型,可以表示“不存在值,存在某个值“。
option类型的简单定义如下所示(根据Expert F# p37)
type 'a option = |
下例中举例说明option类型的值。
> Some 3;; |
option类型在执行有可能失败的计算,例如寻找元素时使用。
事实上,对于F#的列表LIST,存在着tryfind函数,该函数使用option类型将寻找结果返回.
> List.tryfind ((=)1) [2;3;4];; |
这段代码中对于[2;3;4]这个列表调查1或2存不存在.
在上例中,因为没有要寻找的数据,所以返回None类型的数据.
同时,请注意None类型不是'a option,而是int option.
另外,对于列表来说,还存在着不使用option类型,而是有可能抛出异常的方法List.find.
使用匹配模式来对option类型的数据进行操作.下面的示例中接受int option类型的值,如果接受到的值存在,就将该值加一,然后返回int option类型。
let add1 a = |
但是,F#中关于option类型的基本操作,专门定义了Option模块。对于上例中的add1可以做如下定义。
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
等等。
let s = Some 1;; |