我只是想知道如何缩短这些代码,我怀疑这是过于冗余如何缩短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