冗長すぎると思われるため、これらのコードを短縮する方法を考えています
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 があるということです。1 つのタイプの値を取得するには、a) を確認する必要があります。そこにあるかどうか。b)。それが実際にそのタイプであるかどうか、そうでない場合は例外を発生させます。
しかし、ご覧のとおり、上記のコードは冗長に見えます。各タイプの get 間の唯一の違いは、タイプ自体です。
このコードを短くするにはどうすればよいですか?