OCaml模块中的私有值?

问题描述 投票:0回答:2

是否有可能let绑定(无论是函数,值等)是其模块的[[私有,并且在外部不可见?

假设我们有A.ml

let exported = 1 let local = 2

我只希望可以从其他模块访问exportedB.ml

let a = A.exported let error = A.local (* This should error *)

module ocaml private
2个回答
1
投票
这是签名和mli文件背后的动机:它们允许将信息隐藏到外部世界,并且仅公开API的相关部分,而不公开实现细节。就您而言,它看起来像

(* A.ml *) let exported = 1 let local = 2

(* A.mli *) val exported: int

然后只有exportedA.ml之外可见。

0
投票
是,这就是module signatures,在文件级别the .mli file上。

简要说明,添加一个A.mli,然后将要导出的定义放入其中:

val exported : int

© www.soinside.com 2019 - 2024. All rights reserved.