包管理
土豆 2023/3/11
# 定义模块
// src/lib.rc
mod front_of_house {
// 公有模块
pub mod hosting {
// 公有方法
pub fn add_to_waitlist() {}
fn seat_at_table() {}
}
mod serving {
fn take_order() {}
fn serve_order() {}
}
}
pub fn eat_at_restaurant() {
// 绝对路径
crate::front_of_house::hosting::add_to_waitlist();
// 相对路径
front_of_house::hosting::add_to_waitlist();
}
# super 关键字开始构造相对路径
fn serve_order() {}
mod front_of_house {
fn fix_incorrect_order() {
cook_order();
super::serve_order();
}
fn cook_order() {}
}
# 结构体或枚举声明为公共
toast 字段公开,⽽使 seasonal_fruit 字段保持私有
mod back_of_house {
pub struct Breakfast {
pub toast: String, // 公有
seasonal_fruit: String, // 私有
}
impl Breakfast {
pub fn summer(toast: &str) -> Breakfast {
Breakfast {
toast: String::from(toast),
seasonal_fruit: String::from("peaches"),
}
}
}
}
pub fn eat_at_restaurant() {
// 选择黑麦面包作为夏季早餐
let mut meal = back_of_house::Breakfast::summer("Rye");
// 修改面板类型
meal.toast = String::from("wheat");
println!("I'd like {} toast please", meal.toast);
// seasonal_fruit 是私有属性不能访问
//meal.seasonal_fruit = String::from("blueberries");
}
枚举声明为公共的时,它所有的变体都⾃动变为了公共状态
mod back_of_house {
pub enum Appetizer {
Soup,
Salad,
}
}
pub fn eat_at_restaurant() {
let order1 = back_of_house::Appetizer::Salad;
let order2 = back_of_house::Appetizer::Soup;
}
# use 关键字将路径导⼊作⽤域
示例一:绝对路径导入
mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
}
}
// 使用绝对路径导入hosting
use crate::front_of_house::hosting;
pub fn eat_at_restaurant() {
hosting::add_to_waitlist();
hosting::add_to_waitlist();
hosting::add_to_waitlist();
}
示例一:相对路径导入
mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
}
}
// 使用相对路径导入hosting
use self::front_of_house::hosting;
pub fn eat_at_restaurant() {
hosting::add_to_waitlist();
hosting::add_to_waitlist();
hosting::add_to_waitlist();
}
使⽤ as 关键字来提供新的名称
use std::fmt::Result;
use std::io::Result as IoResult;
使⽤ pub use 重导出名称
mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
}
}
// 重导出名称
pub use crate::front_of_house::hosting;
pub fn eat_at_restaurant() {
hosting::add_to_waitlist();
hosting::add_to_waitlist();
hosting::add_to_waitlist();
}
使⽤外部包
use rand::Rng;
fn main() {
let secret_number = rand::thread_rng().gen_range(1, 101);
}
嵌套的路径
// 示例一
use std::cmp::Ordering;
use std::io;
// 简化
use std::{cmp::Ordering, io};
// 示例二
use std::io;
use std::io::Write;
use std::{self,Write}
通配符
use std::collections::*;
将模块拆分为不同的⽂件
// src/front_of_house.rs
pub mod hosting {
pub fn add_to_waitlist() {}
}
// src/lib.rs
mod front_of_house;
pub use crate::front_of_house::hosting;
pub fn eat_at_restaurant() {
hosting::add_to_waitlist();
hosting::add_to_waitlist();
hosting::add_to_waitlist();
}