Spróbuj lepiej zrozumieć interfejs / moduł OCaml

Rozumiem w OCaml są koncepcjeinterfaces imodule.

I rozumiem, jak z nich korzystać teraz.

Nie rozumiem jednak, jak je w pełni wykorzystać.

Na przykład w Javie powiedzmy, że mamy interfejsMap i my też mamyHashtable iHashMap to narzędzieMap.

W kodzie mogę to zrobić:

Map m = new Hashtable();
m.put("key", value);

Kiedyś, jeśli zmienię zdanie, mogę się zmienićHashmap bardzo szybko zmieniającMap m = new Hashtable(); doMap m = new HashMap();, dobrze?

Ale jak mogę to łatwo zrobić w Ocaml?

Na przykład mamMapSig i „HashMap: MapSigand "Hashtable:MapSig w OCaml.

Jak mogę łatwo zmienić implementację?

Myślę, że nie mogę, ponieważ w OCaml muszę zrobić:

let m = Hashtable.create ();;

Hashtable.put m key value;;

jeśli chcę użyćHashMap zamiast tego muszę wymienić każdyHashtable zHashMap w kodzie, prawda?

Edytować:

Nie szukam tylko sposobu na utworzenie aliasu do modułów. Rozważam również ważność implementacji, tj. Czy implementacja podąża za pożądanym interfejsem.

Na przykład w powyższym przykładzie Java tylko wtedy, gdyHashMap zaimplementowałMap interfejs, mogę wymienićHashtable zHashMap. w przeciwnym razie kompilator Java narzeka.

ale jeśli to zrobięmodule M = Hashtable w OCaml i jeśliHashMap nie następujeMapSig i zastępujęHashtable zHashMap, co się stanie? Myślę, że kompilator nie narzeka, prawda?

questionAnswers(2)

yourAnswerToTheQuestion