微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

F# 库结构 SomeCode.fs库.fs

如何解决F# 库结构 SomeCode.fs库.fs

我正在对我的一个项目进行一些重组,并决定为其中的很大一部分制作一个单独的图书馆项目。

我的问题在于我有多个包含模块的文件,其中许多文件应该对用户 API 隐藏,我该如何实现?我之前没有尝试过这个,所以不熟悉库结构与命令行项目的不同之处,以及如何正确地确定范围。如果我可以看到 lib 项目中的每个文件 其他项目为什么我们有 Library.fs 文件

正式一点。说我有 SomeCode.fs 和 Library.fs

SomeCode.fs

module SomeCode

type SomeType = ...

let someFunc1 ... = ...

// things to hide here

// depend on hidden code
let SomeFunc2 ... = ... 

库.fs

namespace SomeLib

module Mod1 = ...

这旨在针对其他 F# 项目。如何构建它,以便 API 只看到正确的内容,并且仍然可以维护?

解决方法

internal 是您的朋友。如果你声明一个模块

module internal MyNamSpace.MySecretModule

这只能从您的项目中访问。

您公开的模块 Library,这是您的 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。