Rust语言从入门到入坑——(6)Rust组织管理


在这里插入图片描述

0 引入

任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。本教程到目前为止所有的程序都是在一个文件中编写的,主要是为了方便学习 Rust 语言的语法和概念。对于一个工程来讲,组织代码是十分重要的。Rust 中有三个重要的组织概念:箱、包、模块。


1、组织概念

下面是按照逐渐递增大小关系说明的

1. 1、箱

1、"箱"是二进制程序文件或者库文件,存在于"包"中。
2、"箱"是树状结构的,它的树根是编译器开始运行时编译的源文件所编译的程序。
3、注意:“二进制程序文件"不一定是"二进制可执行文件”,只能确定是是包含目标机器语言的文件,文件格式随编译环境的不同而不同。

1. 2、包

1、当我们使用 Cargo 执行 new 命令创建 Rust 工程时,工程目录下会建立一个 Cargo.toml 文件。工程的实质就是一个包,包必须由一个 Cargo.toml 文件来管理,该文件描述了包的基本信息以及依赖项
2、一个包最多包含一个库"箱",可以包含任意数量的二进制"箱",但是至少包含一个"箱"(不管是库还是二进制"箱")。
3、当使用 cargo new 命令创建完包之后,src 目录下会生成一个 main.rs 源文件,Cargo 默认这个文件为二进制箱的根,编译之后的二进制箱将与包名相同。

1. 3、模块

1、对于一个软件工程来说,我们往往按照所使用的编程语言的组织规范来进行组织,组织模块的主要结构往往是树。Java 组2、织功能模块的主要单位是类,而 JavaScript 组织模块的主要方式是 function。
这些先进的语言的组织单位可以层层包含,就像文件系统的目录结构一样。Rust 中的组织单位是模块(Module)。
3、在文件系统中,目录结构往往以斜杠在路径字符串中表示对象的位置,Rust 中的路径分隔符是 :: 。
路径分为绝对路径和相对路径。绝对路径从 crate 关键字开始描述。相对路径从 self 或 super 关键字或一个标识符开始描述。

mod nation {
    
    
    mod government {
    
    
        fn govern() {
    
    }
    }
    mod congress {
    
    
        fn legislate() {
    
    }
    }
    mod court {
    
    
        fn judicial() {
    
    }
    }
}

//访问时候可以使用 相对路径也可以使用绝对路径
crate::nation::government::govern();    //绝对
nation::government::govern();           //相对

2、组织中权限

2.1 权限

  • Rust 中有两种简单的访问权:公共(public)和私有(private)。
  • 默认情况下,如果不加修饰符,模块中的成员访问权将是私有的。
  • 如果想使用公共权限,需要使用 pub 关键字。
  • 对于私有的模块,只有在与其平级的位置或下级的位置才能访问,不能从其外部访问。
  • 如果模块中定义了结构体,结构体除了其本身是私有的以外,其字段也默认是私有的。所以如果想使用模块中的结构体以及其字段,需要 pub 声明(枚举不具备该性质)。
mod nation {
    
    
    pub mod government {
    
    
        pub fn govern() {
    
    }
    }
    mod congress {
    
    
        pub fn legislate() {
    
    }
    }
    mod court {
    
    
        fn judicial() {
    
    
            super::congress::legislate();
        }
    }
}
fn main() {
    
    
    nation::government::govern();
}

2.2 模块引用

现在两个模块
test1.rs 代码如下

pub fn message() -> String {
    
    
    String::from("This is the 2nd module.")
}

main.rs 代码如下

mod test1;

fn main() {
    
    
    println!("This is the main module.");
    println!("{}", second_module::message());
}

这样是可以引用成功的。

2.2 Use 关键词

使用use可以引用标准库,也可以引用自定义的,这样就比较方便,解决了局部模块路径过长的问题。和python中的 import有点类似,和C++中的use namespace用法异曲同工。当然也可以使用use xxx as 作为别名使用
代码如下(示例):

mod nation {
    
    
    pub mod government {
    
    
        pub fn govern() {
    
    }
    }
}
use crate::nation::government::govern;       // use 过之后
use crate::nation::govern as nation_govern;  // 别名

fn main() {
    
    
	nation_govern();
    govern();
}

Rust 官方标准库字典:https://doc.rust-lang.org/stable/std/all.html


3、总结

Rust 组织管理在进行大规模的工程构建中可以更好的组织,划分模块。


猜你喜欢

转载自blog.csdn.net/ljsant/article/details/131350415