相关疑难解决方法(0)

将模块拆分为多个文件

我希望有一个包含多个结构的模块,每个模块都在自己的文件中.Math模块为例:

Math/
  Vector.rs
  Matrix.rs
  Complex.rs
Run Code Online (Sandbox Code Playgroud)

我希望每个结构都在同一个模块中,我将从我的主文件中使用它,如下所示:

use Math::Vector;

fn main() {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

然而,Rust的模块系统(开始时有点混乱)并没有提供一种明显的方法来实现这一点.它似乎只允许您将整个模块放在一个文件中.这不是质朴的吗?如果没有,我该怎么做?

module rust

87
推荐指数
6
解决办法
3万
查看次数

pub(crate) 函数声明语法是什么意思?什么时候使用?

我是 Rust 新手,我在开源存储库中遇到了这种函数声明 pub(crate) fn

我以前从未见过这种语法,所以我想知道它是用来做什么的?

rust

13
推荐指数
1
解决办法
7684
查看次数

“pub”是指公共到板条箱还是公共到模块?

要使子模块中的方法公开,您必须显式地重新导出它们,否则使子模块本身公开:

mod foo {
    mod bar {
        pub fn baz() {}
    }
    pub use self::bar::baz;
}
Run Code Online (Sandbox Code Playgroud)

这似乎暗示pub用于指示某件事应该仅对模块公开(因为您可以选择不这样做)

但是,如果您使用在外部上下文中定义的私有类型,那么当您尝试在内部上下文中将涉及该类型的公共函数设为公共时,即使它没有重新导出,也会出现错误。

mod foo {
    struct Foo;

    mod bar {
        use super::Foo;

        pub fn baz(foo: Foo) {}
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是

mod foo {
    mod bar {
        pub fn baz() {}
    }
    pub use self::bar::baz;
}
Run Code Online (Sandbox Code Playgroud)

使用pub关键字的惯用方法是什么?它应该保留给实际上公共的东西还是可以用于内部模块?

visibility conventions rust

5
推荐指数
1
解决办法
1901
查看次数

标签 统计

rust ×3

conventions ×1

module ×1

visibility ×1