|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么?利用选项(Option)
type T option =
None
Some of T
上面看一个例子:
> let people = [ ("Adam", None);
("Eve" , None);
("Cain", Some("Adam","Eve"));
("Abel", Some("Adam","Eve")) ];;
val people : (string * (string *string) option) list
利用形式婚配(Patternmatching)来天生option:
> let showParents (name,parents) =
match parents with
Some(dad,mum) -> printfn "%s has father %s, mother %s" name dad mum
None -> printfn "%s has no parents!" name;;
val showParents : (string * (string * string) option) -> unit
> showParents people.[0];;
Adam has no parents
val it : unit = ()
Option的一些有效的办法:
办法 范例 形貌
Option.get Toption->T 前往一个Some范例的值。或抛非常
Option.isNone Toption->bool 前往一个Option是不是是None
Option.map (T->U)->Toption->Uoption 假如是None,就前往None。假如是Some(x),前往Some(fx),f是给定的函数
Option.iter (T->unit)->Toption->unit 对Some范例的Option实行指定的办法。
一些例子:
> Option.map(fun x->x) a;;
val it : (string * string) option = Some ("aa", "bb")
> Option.map(fun x-> match x with (first,second) -> first) a;;
val it : string option = Some "aa"
> Option.map(fun x-> match x with (first,second) -> second) a;;
val it : string option = Some "bb"
>
> Option.iter(fun x-> match x with (first:string,second) -> printfn "%s" (first+second)) a;;
aabb
val it : unit = ()
>
利用Option范例举行把持
看这个例子:
let fetch url =
try Some (http url)
with :? System.Net.WebException -> None
http函数是在之前章节界说的猎取html的谁人办法。在None的情形下抛出一个exception。乐成的会见会前往一个Some值,也就是Option范例的值。然后我们就能够利用Option值来举行形式婚配:
> match (fetch "http://www.nature.com") with
Some text -> printfn "text = %s" text
None -> printfn "**** no web page found";;
text = <HTML> ... </HTML> (note: the HTML is shown here if connected to the web)
val it : unit = ()
那做企业软件是不是最好用J2EE? |
|