Sof*_*mur 2 inheritance ocaml module
我已经定义了一个接口和一个模块:
module type BASE =
sig
type 'a base
val ...
...
end
module base =
(struct
type 'a base
let ...
...
end: BASE)
Run Code Online (Sandbox Code Playgroud)
我想定义另一个DERIVED继承自的接口BASE,它包含所有类型和签名BASE,并有自己的类型和声明.然后我可以定义另一个Derived类型为的模块DERIVED.
谁能告诉我怎么做?它是否必然是OCaml的对象特征?
更进一步,是否可以更改类型的名称DERIVED:例如,它被调用'a derived而不是' a base?
您可以include在签名和实现上使用.
module type DERIVED = sig
include BASE
val foo : ...
end
module Derived : DERIVED = struct
include Base
let foo = ...
end
Run Code Online (Sandbox Code Playgroud)
这是一个简单的结构包含.它不是OOP意义上的"(实现)继承",因为没有涉及后期绑定(开放递归).如果定义的值f在Derived先前定义的Base,它会屏蔽之前的f,但打电话给f来自Base仍将使用旧的价值,而不是新的实现.
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |