rust 初探 -- use

rust 初探 -- use

Package, Crate, 定义 Module

use 关键字

作用:将路径引入到作用域内,其依旧遵循私有性规则,也即只用 pub 的部分引入进来才能使用

rust 复制代码
use crate::front_of_house::hosting; // 绝对路径
// use front_of_house::hosting; // 效果是一样的(相对路径)

mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {}
    }
}

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}
// 引入可以到任意层级,包括函数层级,但是一般不这么使用,避免冲突,并保证代码的可读性
use 的习惯用法
  • 函数:将函数的父级模块引入作用域(指定到父级)
  • struct,enum,其它:指定完整路径
rust 复制代码
use std::collections::HashMap;

fn main() {
    let mut map = HashMap::new();
    map.insert(1, 2);
}
  • 同名条目:指定到父级
rust 复制代码
use std::fmt;
use std::io;

fn f1() -> fmt::Result {}
fn f2() -> io::Result {}
  • as 关键字
rust 复制代码
use std::fmt::Result;
use std::io::Result as io_result;

fn f1() -> Result {}
fn f2() -> io_result {}
pub use:重新导出名称
  • 使用 use 将路径导入到作用域内后,该名称在此作用域内是私有的
rust 复制代码
// use crate::front_of_house::hosting; // 外部不可访问
pub use crate::front_of_house::hosting; // 外部可访问

mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {}
    }
}

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}
使用外部包(packege)
  1. Cargo.toml 添加依赖的包:dependencies 下添加需要的包(https://crates.io/)
  2. use 将特定条目引入作用域
rust 复制代码
// 1. Cargo.toml 
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

[dependencies]
rand = "0.8.5"
// 2. use 将特定条目引入作用域
use rand::Rng;
use rand::thread_rng;

fn main() {
    let mut rng = thread_rng();
    let x: u32 = rng.gen();
    println!("{}", x);
}
  • 标准库也被当作外部包,需要使用 use::std 引入使用
使用嵌套路径清理大量的 use 语句

如果使用同一个包或模块下的多个条目,可以使用嵌套路径在同一行内将所有条目进行引入

rust 复制代码
use std::cmp;
use std::io;

// use std::{cmp, io};	//同一行,将所有条目进行引入
// use std::cmp::{self, Ordering}; //如果其中一个是子路径,那么可以使用 self
通配符

使用 * 可以把路径下所有的公共条目都引入到作用域

rust 复制代码
use std::collections::*; //一般在测试文件中这样写,不建议直接这样写

将模块拆分为不同的文件

当模块名后面带的是 ; ,那么 rust 会在 src 目录下查找 同名的 .rs 文件,如果是嵌套的模块,会在和嵌套模块同名的 src/mod_name 目录下查找同名的 .rs 文件。如下所示:

rust 复制代码
mod front_of_house {
	pub mod hosting {
		pub fn add() {}
	} 
}

拆分后是:

rust 复制代码
// /src/main.rs:
mod front_of_house; 
fn main() {}

// /src/front_of_house.rs
pub mod hosting;

// /src/front_of_house/hosting.rs
pub fn add() {}

随着模块逐渐变大,可以把模块的内容移动到其他文件中。

相关推荐
傻啦嘿哟3 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670793 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
传奇开心果编程3 小时前
【xilem0.4基础语法学与练】第13课:Xilem 0.4 最简短代码体现“一切皆设计图“
学习·rust·前端框架
李少兄3 小时前
JavaScript 数据类型完全指南
开发语言·javascript·ecmascript
码事漫谈4 小时前
多人共用一个 key,缓存命中率会不会因此降低?
后端
Seoyoneh4 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
Tangyuewei4 小时前
Java 写 Agent:模型只是组件
java·开发语言
考虑考虑4 小时前
docker compose环境变量替换
运维·后端·自动化运维
小玮看世界5 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
武雄(小星Ai)5 小时前
飞书API上传26MB文件偶发失败:错误码9499与空响应体排坑实录
后端·api·排坑实录