我了解在 OCaml 中有 和 的interfaces
概念module
。
我现在明白如何使用它们了。
但是,我不明白如何充分利用它们。
例如,在 Java 中,假设我们有一个接口,并且Map
我们也有一个实现。Hashtable
HashMap
Map
在代码中,我可以这样做:
Map m = new Hashtable();
m.put("key", value);
有一天,如果我改变主意,我可以Hashmap
通过更改为 来快速更改Map m = new Hashtable();
为Map m = new HashMap();
,对吗?
但是我怎样才能在 Ocaml 中轻松做到这一点?
例如,我在 OCaml 中有MapSig
和 'HashMap:MapSig and "Hashtable:MapSig
。
如何轻松更改实现?
我认为我不能,因为在 OCaml 中我必须这样做:
let m = Hashtable.create ();;
Hashtable.put m key value;;
如果我想HashMap
改用,我必须将代码中的每个替换为,对吗Hashtable
?HashMap
编辑:
我不仅在寻找一种为模块创建别名的方法。我还考虑了实现的有效性,即实现是否遵循所需的接口。
例如,在上面的 Java 示例中,只有HashMap
实现了Map
接口,我才能替换Hashtable
为HashMap
. 否则,Java 编译器会报错。
但是如果我module M = Hashtable
在 OCaml 中这样做,并且如果HashMap
不遵循MapSig
并且我替换Hashtable
为HashMap
,会发生什么?我认为编译器不会抱怨,对吧?