如何将我的 Rust 程序拆分为多个文件?

互联网 行业动态 更新时间:2024-06-13 00:19:32

Jon*_*tte 7

当你开始写 Rust 时,你会先写一段时间,然后你的 main.rs 或 lib.rs 会有点长,你想把它分成很多文件。然而,Rust 书开始谈论 crates、模块和包,并在诸如“内联模块”之类的东西上花费页面和页面,这对您根本没有帮助,并且网络上的大多数教程似乎都在重复同样的方法。

但是,您是一位经验丰富的程序员。你已经发布了一些 Java、C++ 和 Javascript 代码,如果幸运的话,可能还有 Haskell、Erlang 或 ML。您要做的就是拆分main.rs为多个文件并继续前进。你做什么工作?

备忘单

您的src/目录及其main.rslib.rs文件称为 crate。crate 是 Rust 编译器的翻译单元。但是,“模块”比板条箱还小。一般来说,每个源文件都是它自己的模块,它们都需要从主文件中引用(main.rs对于程序,lib.rs对于库)。您的Cargo.toml文件并不关心这一点——它都是从主文件中定义的。

作为主文件的对等文件的每个文件都是它自己的模块。您需要使用构造将其引用/定义为板条箱的一部分mod filename;(不要.rs在模块名称中包含该位。)然后您在文件中以模块名称作为前缀引用符号:let x = filename::function();. 最后,所有符号(类型、函数,甚至结构中的字段)都需要公开,pub以便在模块外可见。

简单示例

// main.rs

use somefile;

fn main() {
    let mut x = somefile::make_thing();
    x.value = 3;
}


// somefile.rs

pub struct Thing {
    pub value : usize;
    pub other : f32;
}

pub fn make_thing() -> Thing {
    return Thing {
        value : 3,
        other: 0.1415,
    };
}


Directory structure:

myprogram/
    Cargo.toml
    src/
        main.rs
        somefile.rs

其他有用的建议

在将同级模块定义为从 main 中使用后,mod somefile;您还可以使用use将名称导入本地命名空间。use仅与命名空间/别名有关,但它本身并不导入其他文件/模块。如果需要,您use somefile::*;可以避免添加somefile::前缀,但您仍然需要为pub要使用的所有符号添加声明。就个人而言,我更喜欢显式的模块名称,然后在模块本身中使用更短的函数名称来弥补,因为冲突的风险更小。

模块也可以从 crate 的顶部开始命名,使用use crate::path::modulename;它特别有用,因为模块可以具有基于文件中内联的子目录和/或内部模块声明的路径(由双冒号分隔)。

希望这很简洁,但足以让你继续前进。这个片段并不是故事的全部——现在你可以继续走得更远,直到你需要别名和模块/箱分离的全部力量,在这一点上,希望 Rust 书能让你走得更远!

更多推荐

多个,如何将,文件,程序,Rust

本文发布于:2023-04-21 09:46:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/e36b706942c5680562be11c0380be55b.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   如何将   文件   程序   Rust

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!