5 (* assoc, also called map or dictionnary *)
6 class virtual ['a
,'b
] oassoc
=
8 inherit ['a
* 'b
] ocollection
10 method virtual assoc
: 'a
-> 'b
11 method virtual delkey
: 'a
-> 'o
14 method replkey
: ('a
* 'b
) -> 'o
=
15 fun (k
,v
) -> o#add
(k
,v
)
17 (* pre: must not be in *)
18 (* method add: ('a * 'b) -> 'o = *)
22 List.map fst (o#tolist)
24 method virtual keys
: 'a list
(* or 'a oset ? *)
26 method find
: 'a
-> 'b
= fun k
->
29 method find_opt
: 'a
-> 'b
option = fun k
->
31 let res = o#assoc k
in
33 with Not_found
-> None
35 method haskey
: 'a
-> bool = fun k
->
36 try (ignore
(o#assoc k
); true)
37 with Not_found
-> false
39 method apply
: 'a
-> ('b
-> 'b
) -> 'o
= fun k f
->
40 let old = o#assoc k
in
43 (* apply default, assoc_default, take in class parameters a default value *)
44 method apply_with_default
: 'a
-> ('b
-> 'b
) -> (unit -> 'b
) -> 'o
=
48 with Not_found
-> default
()
52 method apply_with_default2
= fun k f default
->
53 o#apply_with_default k f default
+> ignore