OCaml:访问 Stdlib 中的类型
OCaml: accessing a type in the Stdlib
我想使用OCaml 的Stdlib 中的Stack 模块,但我还需要一个Stack 模块缺少的成员函数。因此,在 https://dev.realworldocaml.org/files-modules-and-programs.html 之后,我创建了一个文件 stack1.ml
,内容为:
include Stack
let mem a t = List.mem a t.c
因为 c
是 stack.ml
中使用的记录的名称(该文件包含行:type 'a t = { mutable c : 'a list; mutable len : int; }
)。但我得到:
Error: Unbound record field c
我能做什么?
(还有:我需要一个不同名称的文件 Stack1
吗?这对于调用它的文件来说有点烦人。)
'a Stack.t
类型是使用可变列表或任何其他数据类型实现的,这一事实是由 Stack
模块的接口抽象出来的实现细节。
换句话说,在Stack
模块之外,您只能使用独立于此实现的抽象类型'a Stack.t
堆栈模块提供的功能。
幸运的是,这些功能足以实现 mem
功能。例如,使用 fold
:
let mem x s = Stack.fold (fun acc y -> acc || x = y) false s
我想使用OCaml 的Stdlib 中的Stack 模块,但我还需要一个Stack 模块缺少的成员函数。因此,在 https://dev.realworldocaml.org/files-modules-and-programs.html 之后,我创建了一个文件 stack1.ml
,内容为:
include Stack
let mem a t = List.mem a t.c
因为 c
是 stack.ml
中使用的记录的名称(该文件包含行:type 'a t = { mutable c : 'a list; mutable len : int; }
)。但我得到:
Error: Unbound record field c
我能做什么?
(还有:我需要一个不同名称的文件 Stack1
吗?这对于调用它的文件来说有点烦人。)
'a Stack.t
类型是使用可变列表或任何其他数据类型实现的,这一事实是由 Stack
模块的接口抽象出来的实现细节。
换句话说,在Stack
模块之外,您只能使用独立于此实现的抽象类型'a Stack.t
堆栈模块提供的功能。
幸运的是,这些功能足以实现 mem
功能。例如,使用 fold
:
let mem x s = Stack.fold (fun acc y -> acc || x = y) false s