我只是想知道如何縮短這些代碼,我懷疑這是過於冗餘如何縮短OCaml代碼?
let get ename doc =
try Some (StringMap.find ename doc) with Not_found -> None;;
let get_double ename doc =
let element = get ename doc in
match element with
| None -> None
| Some (Double v) -> Some v
| _ -> raise Wrong_bson_type;;
let get_string ename doc =
let element = get ename doc in
match element with
| None -> None
| Some (String v) -> Some v
| _ -> raise Wrong_bson_type;;
let get_doc ename doc =
let element = get ename doc in
match element with
| None -> None
| Some (Document v) -> Some v
| _ -> raise Wrong_bson_type;;
所以,基本上,我有不同類型的值,我把所有這些類型的值到地圖中。
上面的代碼是爲了獲得相應的值類型的地圖。我所做的是爲每種類型,我有一個得到。要獲得一種價值,我必須看到a)。無論是否存在; B)。無論這種類型是否確實如果不是,都會引發例外。
但上面的代碼似乎是多餘的,你可以看到。每種類型的get之間唯一的區別就是類型本身。
我該如何縮短這段代碼?
可以,我們甚至去除多餘'提高Wrong_bson_type' – 2013-04-25 13:38:18
也在做,我們需要()爲雙V?喜歡的樂趣(Double v) - > ...' – 2013-04-25 13:41:21
爲什麼它很醜? – 2013-04-25 13:42:15