F#库结构
我正在对我的一个项目进行重组,并决定为其中很大一部分做一个单独的图书馆项目 我的问题在于,我有多个带有模块的文件,其中许多应该对用户API隐藏,我如何实现这一点?我以前没有尝试过这一点,因此不熟悉库结构与命令行项目之间的区别,以及如何正确地确定范围。如果我能从中看到lib项目中的每个文件 其他项目为什么我们有Library.fs文件 正式一点。假设我有一些code.fs和Library.fs SomeCode.fs Library.fsF#库结构,f#,structure,lib,F#,Structure,Lib,我正在对我的一个项目进行重组,并决定为其中很大一部分做一个单独的图书馆项目 我的问题在于,我有多个带有模块的文件,其中许多应该对用户API隐藏,我如何实现这一点?我以前没有尝试过这一点,因此不熟悉库结构与命令行项目之间的区别,以及如何正确地确定范围。如果我能从中看到lib项目中的每个文件 其他项目为什么我们有Library.fs文件 正式一点。假设我有一些code.fs和Library.fs SomeCode.fs Library.fs 这是为了针对其他F#项目。如何构造它,使API只能看到正确
这是为了针对其他F#项目。如何构造它,使API只能看到正确的东西,并且仍然是可维护的?
internal
是您的朋友。如果您声明一个模块
module internal MyNamSpace.MySecretModule
这只能从项目内部访问
模块库
是公共的,这是您的API
internal
也可用于单个函数,以防只隐藏某些函数
隐藏模块一部分的一种相当常见的方法也是采用以下模式
module MyModule =
[<AutoOpen>]
module internal MySecretModule =
let apa = 1
// Bunch of other internal stuff
// Can use stuff from MySecretModule, but other projects cannot
let bepa = apa + 1
模块MyModule=
[]
模块内部MySecretModule=
设apa=1
//一堆其他内部的东西
//可以使用MySecretModule中的内容,但其他项目不能
设bepa=apa+1
但是,如果模块中有不应隐藏的部分,该怎么办?请参阅扩展答案自从我询问后,它已被更改。但谢谢你,这帮了大忙。我正在将我的lexer/parser解释器与编译器分离,代码中的许多内容不应该在特定部分之外使用
module internal MyNamSpace.MySecretModule
module MyModule =
[<AutoOpen>]
module internal MySecretModule =
let apa = 1
// Bunch of other internal stuff
// Can use stuff from MySecretModule, but other projects cannot
let bepa = apa + 1