【问题标题】:Restrict module function visibility in a project with library, binary and a module file使用库、二进制文件和模块文件限制项目中的模块功能可见性
【发布时间】:2022-01-19 00:16:02
【问题描述】:

我有一个包含三个文件的项目:

  1. 模块文件 (src/foo.rs)
  2. 库文件 (src/lib.rs)
  3. 二进制文件 (src/main.rs)

我想在模块文件中拥有公共函数,其可见性仅限于库和二进制文件。

我曾尝试使用pub(crate)pub(super) 等,但无济于事。

我想以这样的方式设计项目结构:

  1. 在将lib.rs 中的pub 函数用作依赖包时,只能从外部调用它。
  2. foo.rs 中的所有函数都应该只对lib.rsmain.rs 可见。
  3. main.rs 中的所有函数都应该是私有的。

EDIT1:我想要它,因为pub(crate) 会警告我死代码,而pub 不会。我不希望模块中有任何死代码。在大型项目的维护中,对调试和重构有很大帮助。

EDIT2:Rust Internals Thread

【问题讨论】:

  • main.rs 是否依赖 lib.rs 作为依赖项,您是否希望 main.rs 通过 lib.rs 访问 foo.rs
  • @kmdreko 那同样的事情没有?
  • 你的问题没有任何意义,xy 问题?我建议你忘记这个想法。至少你应该解释为什么你想要那个。
  • 只有 lib.rs 中的 pub 函数——这就是 Rust 的自然工作方式;没有什么特别的需要。 main.rs 中的所有函数——它们是否是私有的并不重要,因为你一开始就不能将二进制文件用作依赖项。 foo.rs 中的所有函数 — 是什么让 your main.rs 与任何其他可能使用该库的 crate 不同? Rust 中没有任何东西有你信任的“朋友”箱子的概念。
  • @Stargatuer 我主要是在问lib.rsmain.rs 是否分别声明foo 模块。

标签: rust rust-cargo


【解决方案1】:
  1. pub 就是这样做的。
  2. 对于 foo.rs 中的这些函数,您需要使用 pub(crate)
  3. 由于 main.rs 是二进制文件,因此无法导入,因此它们本质上都是私有的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多