Versuchen Sie, die Schnittstelle / das Modul von OCaml besser zu verstehen
Ich verstehe in OCaml gibt es Konzepte voninterfaces
undmodule
.
Und ich verstehe jetzt, wie man sie benutzt.
Was ich jedoch nicht verstehe, ist, wie man sie voll ausnutzt.
Nehmen wir zum Beispiel an, wir haben in Java eine SchnittstelleMap
und wir haben auchHashtable
undHashMap
dieses GerätMap
.
Im Code kann ich machen wie:
Map m = new Hashtable();
m.put("key", value);
Eines Tages kann ich mich ändern, wenn ich es mir anders überlegeHashmap
sehr schnell durch wechselMap m = new Hashtable();
zuMap m = new HashMap();
, Recht?
Aber wie kann ich das in Ocaml einfach machen?
Zum Beispiel habe ichMapSig
und 'HashMap: MapSigand "Hashtable:MapSig
in OCaml.
Wie kann ich die Implementierung einfach ändern?
Ich glaube nicht, dass ich das kann, weil ich in OCaml Folgendes tun muss:
let m = Hashtable.create ();;
Hashtable.put m key value;;
wenn ich benutzen willHashMap
stattdessen muss ich jeden ersetzenHashtable
mitHashMap
im Code, richtig?
Ich bin nicht nur auf der Suche nach einem Alias für Module. Ich betrachte auch die Gültigkeit von Implementierungen, d. H., Ob die Implementierung der gewünschten Schnittstelle folgt.
Zum Beispiel im obigen Java-Beispiel nur, wennHashMap
umgesetzt hatMap
Schnittstelle kann ich ersetzenHashtable
mitHashMap
. Andernfalls beschwert sich der Java-Compiler.
aber wenn ich es machemodule M = Hashtable
in OCaml, und wennHashMap
folgt nichtMapSig
und ich ersetzeHashtable
mitHashMap
, was wird passieren? Ich denke, der Compiler wird sich nicht beschweren, oder?