1,包
包是分享代码的基本单位,一个toml就是一个包。
新建一个包:
cargo new xxx
效果:
2,Crate
Crate是产生功能的基本单位,是包的子。
一个包至少要有一个Crate。
Crate有两种:
库文件lib:对外部提供功能。
可执行文件bin:生成可执行文件。
lib
一个包,最多一个lib。
lib.rs,当被引用时会导入。
bin
一个包,bin的数量不限制。
main.rs。以及src / bin目录下的所有rs。都会被编译成exe。
3,模块:简单使用
模块是组织代码的基本单位。
简单使用:
pub mod a {
pub mod b {
pub mod c {
pub fn hello() {
println!("Hello, world!");
}
}
}
}
use a::b::c::hello;
fn main() {
hello();
}
Hello, world!
mod表示模块。
pub表示外部可以访问内部。
a,b,c是嵌套的三个模块。
4,模块:相对路径
同mod下的子mod:
pub mod a {
pub mod b {
pub mod c {
pub fn hello() {
println!("Hello, world!");
}
}
pub fn say_hello() {
self::c::hello();
}
}
}
父mod下的子mod:
pub mod a {
pub mod b {
pub mod c {
pub fn say_hello() {
super::hello();
}
}
pub fn hello() {
println!("Hello, world!");
}
}
}
5,模块:use写法
起别名:
use a::b::c::hello as H;
fn main() {
H();
}
导入的同时导出:
pub mod a {
pub mod b {
pub mod c {
pub fn hello() {
println!("Hello, world!");
}
}
}
pub use self::b::c::hello as H;
}
use a::H;
fn main() {
H();
}
同时导入多个:
pub mod a {
pub fn hello1() {
println!("11111");
}
pub fn hello2() {
println!("22222");
}
}
use a::{
hello1, hello2};
fn main() {
hello1();
hello2();
}
导入全部:
pub mod a {
pub fn hello1() {
println!("11111");
}
pub fn hello2() {
println!("22222");
}
}
use a::*;
fn main() {
hello1();
hello2();
}
6,模块:拆分文件
一个单独的rs:
pub mod a {
pub fn hello() {
println!("Hello World!");
}
}
想加入crate,需要声明:
mod a;
这样,编译器就能够访问这个rs文件。
完整的案例:
mod a;
use a::a::hello;
fn main() {
hello();
}
这是绝对路径的写法。
第一个a表示文件名。
第二个a表示模块。