首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将模块拆分到多个文件中

将模块拆分到多个文件中
EN

Stack Overflow用户
提问于 2014-03-24 04:53:08
回答 3查看 52.6K关注 0票数 128

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

代码语言:javascript
复制
Math/
  Vector.rs
  Matrix.rs
  Complex.rs

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

代码语言:javascript
复制
use Math::Vector;

fn main() {
  // ...
}

然而,Rust的模块系统(一开始有点令人困惑)并没有提供一种显而易见的方法来做到这一点。它似乎只允许将整个模块放在一个文件中。这是非质朴的吗?如果不是,我该怎么做?

EN

回答 3

Stack Overflow用户

发布于 2016-02-03 00:07:37

Rusts纯粹主义者可能会说我是异端,并讨厌这个解决方案,但这个解决方案要简单得多:只需在其自己的文件中做每件事,然后在mod.rs中使用"include!“宏:

代码语言:javascript
复制
include!("math/Matrix.rs");
include!("math/Vector.rs");
include!("math/Complex.rs");

这样就不会添加嵌套模块,并避免复杂的导出和重写规则。简单,有效,不大惊小怪。

票数 29
EN

Stack Overflow用户

发布于 2014-03-24 09:25:08

好了,我和我的编译器斗争了一段时间,终于让它工作了(感谢BurntSushi指出了pub use

main.rs:

代码语言:javascript
复制
use math::Vec2;
mod math;

fn main() {
  let a = Vec2{x: 10.0, y: 10.0};
  let b = Vec2{x: 20.0, y: 20.0};
}

数学/mod.rs:

代码语言:javascript
复制
pub use self::vector::Vec2;
mod vector;

数学/向量.rs

代码语言:javascript
复制
use std::num::sqrt;

pub struct Vec2 {
  x: f64,
  y: f64
}

impl Vec2 {
  pub fn len(&self) -> f64 {
    sqrt(self.x * self.x + self.y * self.y) 
  }

  // other methods...
}

可以用同样的方式添加其他结构。注意:使用0.9编译,而不是master。

票数 25
EN

Stack Overflow用户

发布于 2021-01-31 14:30:42

一种更生硬的导出模块的方法,这是我从Github上学到的。

代码语言:javascript
复制
mod foo {
    //! inner docstring comment 1
    //! inner docstring comment 2

    mod a;
    mod b;

    pub use a::*;
    pub use b::*;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22596920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档