【问题标题】:Correct way to structure a Crate?构建板条箱的正确方法?
【发布时间】:2022-06-15 05:13:22
【问题描述】:

我开始为特定的 API 编写一个 crate。我已阅读 The Rust Reference 的 Modules 部分,但我不清楚以下 2 个文件结构是否等效,是否有更好/惯用的方法?

some-crate/
|- src/
|   |- bits.rs
|   |- bobs.rs
|   |- lib.rs
|- foo/
|   |- mod.rs
|- bar/
|   |- mod.rs

some-crate/
|- src/
|   |- bits.rs
|   |- bobs.rs
|   |- lib.rs
|   |- foo.rs
|   |- bar.rs

我想使用以下符号some-crate::foo::do_this();访问我的子级函数

子级模块需要访问bits.rsbobs.rs 中的公共项目。

将有 4 个子级模块,因此无需管理大型文件结构。

【问题讨论】:

    标签: rust rust-cargo


    【解决方案1】:

    foo/bar/ 应该在 src/ 的内部。这两个选项是:

    some-crate/             some-crate/
    |- src/                 |- src/
    |   |- bar/             |   |- bar.rs
    |   |   |- mod.rs       |   |- bits.rs
    |   |- foo/             |   |- bobs.rs
    |   |   |- mod.rs       |   |- foo.rs
    |   |- bits.rs          |   |- lib.rs
    |   |- bobs.rs          |- Cargo.toml
    |   |- lib.rs           
    |- Cargo.toml
    

    使用哪个是个人喜好问题。

    就我个人而言,一旦模块获得子模块,我就会使用mod.rs,否则foo.rsfoo/ 最终会在视觉上分开,因为文件查看器通常在文件之前对目录进行排序(参见右侧示例):

    some-crate/             some-crate/
    |- src/                 |- src/
    |   |- bar/             |   |- bar/
    |   |   |- mod.rs       |   |    |- baz.rs
    |   |   |- baz.rs       |   |- foo/
    |   |- foo/             |   |    |- quux.rs
    |   |   |- mod.rs       |   |- bar.rs
    |   |   |- quux.rs      |   |- bits.rs
    |   |- bits.rs          |   |- bobs.rs
    |   |- bobs.rs          |   |- foo.rs
    |   |- lib.rs           |   |- lib.rs
    |- Cargo.toml           |- Cargo.toml
    

    【讨论】:

      【解决方案2】:

      在您的第一个示例中,foobar 根本不属于您的 crate,因为它们不在 src 目录中。你可能打算这样写:

      some-crate/
      |- src/
      |   |- bits.rs
      |   |- bobs.rs
      |   |- lib.rs
      |   |- foo/
      |       |- mod.rs
      |   |- bar/
      |       |- mod.rs
      

      这个例子和你的第二个例子都是等价的,如果你有小的相关模块,我认为第二种方法更好,如果它们之间有更多的逻辑区别(我的大脑喜欢视觉分离)。但是,如果 foobar 最终有自己的子模块,那么使用嵌套目录比在单个文件中嵌套 mod 块要好得多。

      在您的lib.rs 中,您还可以使用pub usepub mod 来更改其他人访问您的模块的方式(在一定程度上)。

      【讨论】:

        猜你喜欢
        • 2020-06-13
        • 2013-08-04
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多