我只是想知道如何缩短这些代码,因为我怀疑它太多余了
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;;
所以,基本上,我有不同类型的值,我把所有这些类型的值放到一个地图中。
上面的代码用于从地图中获取相应类型的值。我所做的是,对于每种类型,我都有一个 get。要获得一种类型的值,我必须看到 a)。是否存在;乙)。是否确实是那种类型,如果不是,则引发异常。
但是如您所见,上面的代码似乎是多余的。每种类型的 get 之间的唯一区别就是类型本身。
如何缩短此代码?