Rust模块的理解

Rust模块的理解


 

  • 每一个crate就是一个根模块。如:exp, lip, lip1, lip2, lip3

  • 独立的一个文件就是一个mod,文件名就是mod名;但是main.rs, lib.rs, mod.rs除外,mod.rs的模块名就是其所在目录的名字; 而main.rs, lib.rs 的目录结构,如:exp/src/main.rslip/src/lib.rs ;两者的mod名分别是exp和lip。

  • 文件和文件夹内的mod 及其内部定义的函数默认都是private的,除非pub声明公开。

  • 一个文件夹直接包含mod.rs ,如: rust_mod_study/lip2/src/worker/mod.rs ;则 worker就是模块名; 并且mod.rs为此模块的入口文件,此文件夹内的其他子模块都要在mod.rs中 pub mod 模块名,声明后,外部方可看到。

  • 如果一个元素是私有的,那么只有本模块内的元素以及它的子模块可以访问。

  • 如果一个元素是公开的,那么它上一层的模块就有权访问它。

  • 如果存在与文件同名的目录, 则在该目录下定义的模块都是该文件的子模块.(2018 edition有效)如:rust_mod_study/lip3/src/caller.rs ; rust_mod_study/lip3/src/caller/callerin.rs;

特别注意,callerin这个mod必须在caller.rs中以pub mod callerin;形式声明,否则外部看不到; 最终模块路径为:lip3::caller::callerin::call();

  • rust 2018 edition 不再需要在根模块中使用extern crate xxx;语法导入第三方包。如在文件main.rs , lib.rs中不再需要extern crate xxx语法导入第三方包, 如:rust_mod_study/exp/src/main.rs 中的extern crate xxx可以去掉了。只需在Cargo.toml中配置好, 然后在代码中以模块路径访问即可,如:modx::mody::modz::fnx(); 也可以use一下,缩短路径。

  • rust 如何引用未发布的本地crate, 特别之处在exp/Cargo.toml中, 如:

[package]
name = "exp"
version = "0.1.0"
authors = ["yujinliang <285779289@qq.com>"]
edition = "2018"
​
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
lip = {path= "../lip" }
lip1 = {path= "../lip1" }
lip2 = {path= "../lip2" }
lip3 = {path= "../lip3" } 
​
  • 目录结构:Cargo.lock Cargo.toml exp lip lip1 lip2 lip3 target在同一个父目录rust_mod_study中;其中exp/src/main.rs引用lip开头的所有模块。

 

  • 配置rust workspace, 在rust_mod_study/Cargo.toml中加入以下配置即可,如:

    ```
    [workspace]
    members = ["exp", "lip", "lip1", "lip2", "lip3"] 
    ```
  • 在rust_mod_study/exp中给出一个例子用于说明:在同一个crate下各个子mod间的可见性和引用方法

    1. 首先各个子mod都需要在main.rs(属于crate顶级mod)中声明自己, 如: mod producer; mod consumer; mod switcher;等 ,只有这样各个子mod才能看到彼此,才能引用。

    2. 每一个子mod可以用use crate::xxx形式引用在1.中声明的mod, 如:use crate::producer;等。

    3. 每一个子mod自身默认都是自私的,除非以pub , pub use等打开为公用。

    4. 对于pub struct 其field默认仍然是private的,需要pub声明为公用。

    总结: 父mod可以引用其子mod, 但是在父模块中仍然需要声明后方可应用子模块,如:mod 子模块名 ;而每一个子模块,只可以看到在其父模块中声明过的子mod, 但是仍需use crate::子模块名 来引用一下后方可用。

    我是在rust 1.39中做的实验, 时间急促,水平有限,如有谬误,欢迎指正,感谢啦!

     

  • 所有的例子代码都在rust_mod_study目录中 `

 

[footnote]  本文只是随笔,所以不求面面俱到,只针对容易误解的点。

 

RUST学习随笔,如有谬误,尽请指正,谢谢。

作者:心尘了

email: 285779289@qq.com

https://github.com/yujinliang

 

Reference List

  • 深入浅出Rust, 范长春著, 机械工业出版社.

  • Rust编程之道, 张汉东著, 电子工业出版社.

  • 其他网络资料未详

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Rust权威指南是一本深入介绍Rust编程语言的权威性书籍。这本书主要介绍Rust语言的基本语法和特性,包括Rust的所有关键字、数据类型、函数、模块、宏、”生命周期”、所有权等重要概念的详细解释和使用方法。 这本书由Rust社区知名的开发者Steve Klabnik和Carol Nichols撰写,是Rust开发者及其他想要学习Rust编程语言的程序员的必读之作。书中详细介绍了Rust的语法规则和特性,如何编写高质量、高性能的Rust代码,以及如何使用Rust来进行并发编程和系统级编程。 通过阅读本书,读者能够了解Rust的核心概念,如所有权、生命周期和借用,以及如何使用Rust的工具链进行开发。在本书的后半部分,作者通过实践案例和示例向读者展示了如何使用Rust来编写高效、可靠的程序。 总的来说,Rust权威指南是一本非常实用且详尽的Rust编程语言指南,对于想要学习Rust编程语言的读者非常有益。不仅提供了基础知识方面的介绍,还给读者提供了诸如性能优化等高级内容的指导。同时,本书也适合那些已经有一定Rust编程经验的读者,它们可以通过本书深入了解Rust语言内部之间的联系。 ### 回答2: 《Rust权威指南》是一本针对Rust编程语言的详细讲解和指导的权威指南。该书由Rust的核心开发人员编写,涵盖了Rust语言的基本概念、语法、数据类型、内存管理、并发编程、错误处理、泛型、宏等方面,旨在帮助读者全面深入地学习和理解Rust语言。 该书内容广泛,详细全面,适合初学者和有经验的开发人员。书中每一章都有大量的代码示例,并附有解释和注释,易于理解。书中还介绍了Rust的生态系统和常用开发工具,如包管理器Cargo、测试框架等。 此外,《Rust权威指南》还强调了Rust语言的安全性和性能优势。Rust通过静态类型检查、所有权系统、借用规则等机制,大大减少了程序运行时的内存安全问题。同时,Rust的设计和实现也使得其具有与C++类似的性能优势。 总的来说,《Rust权威指南》是一本权威性强、内容深入的Rust编程指南。对于想要学习Rust编程语言的开发人员来说,这本书绝对是一本值得购买和阅读的好书。 ### 回答3: 《Rust权威指南》是一本全面介绍Rust语言的书籍,该书由Rust中文社区的翻译小组翻译而成。这本书详细讲解了Rust语言的语法、基础知识、数据类型、控制流、函数、模块、生命周期、所有权系统等内容,涵盖了Rust语言的各个方面。 这本书的特点在于其权威性和全面性。作为Rust语言的权威指南,该书不仅涵盖了Rust语言的基础知识,还深入讲解了Rust语言的高级特性,如内存管理、安全性、并发等方面。此外,书中还包括了大量的实例和案例,可以帮助读者更深入地理解Rust语言。 对于初学者来说,该书可以作为Rust语言的入门指南。对于已经掌握了Rust语言基础知识的读者来说,本书也可以作为进一步深入学习和实践Rust语言的指南。此外,该书还提供了完整的API文档和Rust语言的标准规范,方便读者进行参考和查阅。 总之,《Rust权威指南》是一本全面、详细、权威的Rust语言指南,适合Rust语言的初学者和进阶者。读者可以通过该书深入了解Rust语言并掌握其应用,提高自己的编程能力和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值