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?

Bearbeiten:

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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage